编程

使用 Laravel 的设备推出功能管理多设备会话

37 2025-02-25 13:13:00

Laravel 通过 Auth::logoutOtherDevices() 提供了一个强大的安全功能,使用户能够在除当前设备之外的所有设备上终止会话。此功能对于在处理敏感数据的应用中维护帐户安全特别有价值。

你可以实现此功能以采取主动安全措施,例如应对可疑活动:

public function secureSessions(Request $request)
{
    Auth::logoutOtherDevices($request->password);
 
    return back()->with('status', 'All other device sessions terminated');
}

该实现需要 auth.session 中间件来进行适当的会话管理:

Route::middleware(['auth', 'auth.session'])->group(function () {
    // Protected routes
});

以下是修改密码的多设备退出的实例:

class SecurityController extends Controller
{
    public function updatePassword(Request $request)
    {
        $validated = $request->validate([
            'current_password' => 'required',
            'new_password' => 'required|min:8|confirmed'
        ]);
        if (!Hash::check($request->current_password, Auth::user()->password)) {
            return back()->withErrors([
                'current_password' => 'Invalid password provided'
            ]);
        }
        Auth::logoutOtherDevices($request->current_password);
        Auth::user()->update([
            'password' => Hash::make($request->new_password)
        ]);
        return redirect('/dashboard')
            ->with('status', 'Password updated and other devices logged out');
    }
}

这种方法为用户提供了对其帐户安全的更大控制,同时有助于防止通过遗忘的活动会话进行未经授权的访问。