Laravel 單裝置登入

Instanced發表於2018-04-30

前幾天在 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();
}
}

這樣在使用者登入成功後,即會登出其他裝置上的會話而實現單裝置登陸。

相關文章