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

Php 在Laravel 5.5中更新用户密码后防止注销,php,laravel,laravel-5.5,change-password,laravel-authentication,Php,Laravel,Laravel 5.5,Change Password,Laravel Authentication,从Laravel5.3开始,添加了这个中间件 \照亮\会话\中间件\身份验证会话 虽然出于安全目的,这无疑是一个好处,但如果用户更改密码,它还负责注销用户(向用户提供登录页面) 在Laravel 5.5中,我们如何防止用户在更改密码时注销(被迫重新登录)?在更改密码后,只需“重新登录”用户,而不是更改中间件: <?php //$user->passwordChangeMagicHere() Auth::login($user); //And the user is logged i

从Laravel5.3开始,添加了这个中间件

\照亮\会话\中间件\身份验证会话

虽然出于安全目的,这无疑是一个好处,但如果用户更改密码,它还负责注销用户(向用户提供登录页面)


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

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

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

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

只是一个旁注,有时您可能需要更新会话的密码\u散列。完成密码更新过程的最佳方法

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

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

在再次登录用户后执行此操作非常重要,否则,将进一步调用

auth()->user();


将返回null。

对我有效的方法是注销、清除会话,然后再次登录

Auth::guard('web')->logout();
Session::flush();
Auth::guard('web')->login($this);
对于大于8.x的Laravel

当会话的密码散列与当前的
auth()->user()
不同时,laravel将自动注销该用户。这是在该中间件上完成的:

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

如果使用新的哈希密码更新会话上的密码\u哈希,用户将不会注销

session()->put([
'password\u hash'.auth()->getDefaultDriver()=>$user->getAuthPassword()
]);
例如:

session()->put([
'password\u hash\u web'=>“$2y$10$…hashpasswordstoredondatabase”
]);

这只适用于HTTP请求。如果我想通过CURL调用重置,那么我应该怎么做。再次让用户登录在这里不起作用。我注意到,用户总是在更新密码时注销。不管它是API调用还是HTTP方法。你有其他方法来防止这种情况吗?特别是对于curlapi更新