Я вижу много информации о том, как проходить аутентификацию для каждой технологии, и у меня есть опыт аутентификации для обоих случаев, когда мое приложение использует Laravel только для SSR (рендеринг на стороне сервера) и использует только Vuejs или Angular для CSR (Рендеринг на стороне клиента). Но я не вижу никакого контента о том, как защитить вместе URL с помощью Laravel + Vuejs (подход SSR), я выбираю этот подход как SSR, потому что мне понадобится хороший SEO на этом сайте, и я не хочу чтобы сделать этот SPA.
VueJs - это единственная структура из js, которую я могу работать вместе с технологией SSR, такой как Laravel (что я знаю).
Laravel уже есть подход аутентификации, но я использую подход API, потому что в моей системе будет мобильное приложение, поэтому мне нужна вся информация в одном месте, и проблема начинается здесь.
При обычном подходе мы просто делаем эта простая функция
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
и Laravel уже введена в сеанс и подходит для go, а в одном приложении мы используем AccessTokens и RefreshTokens и т. д. c.
Но если мы будем использовать оба? Мне нужно будет сделать аутентификацию каким способом? Пример того, что я использую
authService.logIn(this.user).then(response => {
if(response.data.success === 1) {
userService.updateObj(this.userModelOfi, response.data.user);
authService.setAccessToken(response.data.token);
utilService.showToast(this.$swal, 5000, 'success', response.data.message);
$('#login_2').modal('hide').appendTo('body');
} else {
utilService.showToast(this.$swal, 5000, 'error', response.data.message);
}
this.loginRequest = false;
}).catch(error => {
this.loginRequest = false;
});
Это моя функция входа в систему на Vue. JS, а эта функция authService.setAccessToken(response.data.token);
хранит мой токен в Cook ie, потому что я хочу проверить, если токен аутентифицирован в моем SSR, поэтому, когда пользователь переходит на страницу пользователя для получения информации об изменениях, это защищенный маршрут, как я могу его защитить? Поэтому я делаю так:
public function handle($request, Closure $next) {
if (isset($_COOKIE['mpw_t'])) {
$tokData = $_COOKIE['mpw_t'];
$today = Carbon::now()->timestamp;
$expirationDate = $this->decodedJwt($tokData)->exp;
if ($today > $expirationDate) {
$response = $this->refreshToken($tokData);
if(isset($response->success)) {
if($response->success === 0) {
$this->cleanCookie('mpw_t');
$this->cleanCookie('mpw_us');
return redirect('/');
} else {
$this->cleanCookie('mpw_t');
setcookie("mpw_t", $response->newTok, time()+60*60*24*30, '/');
return $next($request);
}
}
} else {
return $next($request);
}
}
$this->cleanCookie('mpw_t');
$this->cleanCookie('mpw_us');
return redirect('/');
}
Это пользовательское промежуточное ПО, которое регистрирует Laravel, если токен, который я выбрал у повара ie, действителен. Проблема в том, что я не знаю, является ли это правильным подходом, потому что я работаю над сайтом SSR, например, сайтом CSR, проверяющим токены для каждого защищенного маршрута, и в Vue. Js я тоже проверка подлинности с помощью токенов с обеих сторон.
Obs: в этой функции $response = $this->refreshToken($tokData);
из промежуточного программного обеспечения я вызываю мой API внутри моего SSR с помощью GuzzleHttp .