在登录laravel之前重定向,以避免第二次登录
我有php/laravel web应用程序。 我使用laravel auth登录用户。但当我有两张打开的卡片,上面有登录页面时,他们不知道一个页面上的用户已经登录 我读到,当用户登录一个页面时,我必须在中间件中重定向 我尝试在带有覆盖功能的LoginController中执行此操作,但它不起作用在登录laravel之前重定向,以避免第二次登录,laravel,authentication,redirect,Laravel,Authentication,Redirect,我有php/laravel web应用程序。 我使用laravel auth登录用户。但当我有两张打开的卡片,上面有登录页面时,他们不知道一个页面上的用户已经登录 我读到,当用户登录一个页面时,我必须在中间件中重定向 我尝试在带有覆盖功能的LoginController中执行此操作,但它不起作用 public function authenticate(Request $request) { $credentials = $request->only('email'
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::check()){
return redirect()->intended('dashboard');
} else if (Auth::attempt($credentials)) {
return redirect()->intended('dashboard');
}
}
我只想在登录到用户登录的应用程序之前进行检查,但我不清楚在哪里。好的,我尝试解释发生了什么 当您在登录表单中打开两个登录表单和ofc时,您已经有了生成值和ofc的csrf令牌字段,但这是一种模式 假设您的csrf_令牌值在两种形式中都是
123
,并且当您成功登录时,laravel会通过向会话中添加您的用户id来更新会话,因此如果您的用户id是1
,则您的令牌将更改为1231
(同样,这是一个哈希值,但会随我一起出现)当您提交第二个表单时,其中包含123
标记,您可以猜到123
不等于1231
,它会抛出TokenMissmatchException
在您的情况下,您可以打开App\Exceptions\Handler.php
并将其添加到您的Handler方法中
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Throwable $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Throwable
*/
public function render($request, Throwable $exception)
{
// Checks if exception is instance of TokenMissmatchException && it throwed in the login page
if ($exception instanceof \Illuminate\Session\TokenMismatchException && $request->path() === 'login') {
$redirectPath = '/';
return redirect($redirectPath);
}
return parent::render($request, $exception);
}
Laravel会自动为您执行此操作,您不能多次登录,但如果我想在第二页登录,为什么会出现419错误?Laravel会检查您是否登录,如果是,则会抛出419例外这就是为什么我想在检查登录之前实现重定向以避免此错误,但我不知道在哪里。或者我想用错误的方法来做这件事?哦,好吧,现在我明白了。但是安全性呢?你的意思是什么?如果有人想假装是使用另一个csrf的用户,laravel仍然不允许不必要的访问?是的,它不允许,因为每个用户令牌都是一个唯一的哈希。根本不,这个方法只检查是否抛出了419错误,如果是,它将用户重定向到主页