前幾天在 laracasts 看了laravel5.6的新功能視訊 logoutOtherDevices
用於使在其他裝置上處於活動狀態的使用者會話無效並“登出”,而不會使其當前裝置上的會話無效。,今天抽空把它應用到了系統裡,在這裡記錄下吧。
在使用此功能前需要先把 app/Http/Kernel.php
web
中介軟體中的 \Illuminate\Session\Middleware\AuthenticateSession::class
註釋取消掉。
在 LoginController
控制器中繼承 Illuminate\Foundation\Auth\AuthenticatesUsers
類中的 authenticated
方法。
protected function authenticated(Request $request, $user)
{
$this->guard()->logoutOtherDevices($request->password);
return response()->json(['message' => '登入成功']);
}
logoutOtherDevices
接受兩個引數,第一個引數是來自表單提交的資料,然後經過加密儲存到第二個引數指定的欄位裡,在經過中介軟體儲存 session
public function logoutOtherDevices($password, $attribute = 'password')
{
if (! $this->user()) {
return;
}
return tap($this->user()->forceFill([
$attribute => Hash::make($password),
]))->save();
}
}
這樣在使用者登入成功後,即會登出其他裝置上的會話而實現單裝置登陸。