在Laravel 5.5中更新用户密码后阻止注销

时间:2017-11-07 00:16:44

标签: php laravel laravel-5.5 change-password laravel-authentication

从Laravel 5.3开始,添加了这个中间件......

  

\照亮\会话\中间件\ AuthenticateSession

虽然它绝对是出于安全目的的好处,但如果他们更改密码,它还负责将用户登录(向用户显示登录页面)。

在Laravel 5.5中,我们如何防止用户在更改密码时被注销(被迫重新登录)?

4 个答案:

答案 0 :(得分:3)

更改密码后,只需“重新登录”用户,而不是更改中间件:

<?php
//$user->passwordChangeMagicHere()

Auth::login($user);
//And the user is logged in again!

答案 1 :(得分:2)

对我有用的是,注销,清除会话,然后重新登录

Auth::guard('web')->logout();
Session::flush();
Auth::guard('web')->login($this);

答案 2 :(得分:0)

只是一个旁注,有时您可能必须更新会话的password_hash。完成更新密码过程的最佳方法。

auth()->login($user, true);

 $request->session()->put([
            'password_hash' =>  $newUser->getAuthPassword(),
        ]);

重要的是您在再次登录用户后执行此操作,否则,进一步调用

auth()->user();

将返回null。

答案 3 :(得分:0)

对于 Laravel > 8.x

当 session 的 password_hash 与当前的 auth()->user() 不同时,laravel 会自动注销用户。这是在这个中间件上完成的:

vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php

如果您使用新的哈希密码更新会话中的 password_hash,用户将不会注销。

session()->put([
   'password_hash_' . auth()->getDefaultDriver() => $user->getAuthPassword()
]);

示例:

session()->put([
   'password_hash_web' => "$2y$10$...hashpasswordstoredondatabase"
]);