Laravel 使用 Fortify 注销其他设备
Laravel logoutOtherDevices with Fortify
我构建了一个带有 Fortify 身份验证的 Laravel 应用程序。要求当用户登录时,他们应该从所有其他设备上注销。在Laravel文档中提到我可以使用Auth::logoutOtherDevices($password);
方法。但不清楚如何将其与 Fortify 一起使用。
我试图在 Fortify::authenticateUsing(function (Request $request) {})
函数中使用它,但它不起作用,因为它在 [=15= 的 logoutOtherDevices()
方法中检查 User
实例] class.
通过在 Laravel\Fortify\Http\Controllers\AuthenticatedSessionController
class 中多挖掘一点,我发现我可以在 app/config/fortify.php
中传入自定义登录管道数组并添加我自己的处理程序来调用那里的 logoutOtherDevices()
方法。
我设法让它以这种方式工作。但是我觉得这种方法有些不对劲,我想看看是否有明显的方法可以做到这一点(我在这里遗漏了什么吗?)
谢谢。
添加我当前的解决方案,希望它能对某人有所帮助。
如果您查看与强化身份验证相关的 classes,您将看到身份验证流经多个处理程序 classes 的管道。虽然没有记录,但您可以自定义此流程并通过覆盖 config/fortify.php
配置文件中的以下内容来添加额外的处理程序。
'pipelines' => [
'login' => [
Laravel\Fortify\Actions\AttemptToAuthenticate::class,
Laravel\Fortify\Actions\PrepareAuthenticatedSession::class,
App\Actions\Fortify\LogoutOtherDevices::class
]
]
如果配置文件中不存在此块,则需要添加此块。需要前两个才能使默认身份验证过程正常工作。最后一个:App\Actions\Fortify\LogoutOtherDevices::class
是我的自定义处理程序,您可以在其中添加代码以从其他设备注销用户。
创建 App\Actions\Fortify\LogoutOtherDevices
class 如下所示,它将起作用。
<?php
namespace App\Actions\Fortify;
use Illuminate\Support\Facades\Auth;
class LogoutOtherDevices
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param callable $next
* @return mixed
*/
public function handle($request, $next)
{
// logout other devices
Auth::logoutOtherDevices($request->password);
return $next($request);
}
}
这很好用。但这在任何地方都没有记录,所以他们有可能随时改变这种行为。这就是我问这个问题的原因,看看是否有任何其他方法可以做到这一点。
看起来你需要按照他们的文档使用管道。看看https://jetstream.laravel.com/1.x/features/authentication.html#customizing-the-authentication-pipeline
To define your custom pipeline, you may use the
Fortify::authenticateThrough method. This method accepts a closure
which should return the array of classes to pipe the login request
through. Typically, this method should be called from the boot method
of your App\Providers\JetstreamServiceProvider class.
我构建了一个带有 Fortify 身份验证的 Laravel 应用程序。要求当用户登录时,他们应该从所有其他设备上注销。在Laravel文档中提到我可以使用Auth::logoutOtherDevices($password);
方法。但不清楚如何将其与 Fortify 一起使用。
我试图在 Fortify::authenticateUsing(function (Request $request) {})
函数中使用它,但它不起作用,因为它在 [=15= 的 logoutOtherDevices()
方法中检查 User
实例] class.
通过在 Laravel\Fortify\Http\Controllers\AuthenticatedSessionController
class 中多挖掘一点,我发现我可以在 app/config/fortify.php
中传入自定义登录管道数组并添加我自己的处理程序来调用那里的 logoutOtherDevices()
方法。
我设法让它以这种方式工作。但是我觉得这种方法有些不对劲,我想看看是否有明显的方法可以做到这一点(我在这里遗漏了什么吗?)
谢谢。
添加我当前的解决方案,希望它能对某人有所帮助。
如果您查看与强化身份验证相关的 classes,您将看到身份验证流经多个处理程序 classes 的管道。虽然没有记录,但您可以自定义此流程并通过覆盖 config/fortify.php
配置文件中的以下内容来添加额外的处理程序。
'pipelines' => [
'login' => [
Laravel\Fortify\Actions\AttemptToAuthenticate::class,
Laravel\Fortify\Actions\PrepareAuthenticatedSession::class,
App\Actions\Fortify\LogoutOtherDevices::class
]
]
如果配置文件中不存在此块,则需要添加此块。需要前两个才能使默认身份验证过程正常工作。最后一个:App\Actions\Fortify\LogoutOtherDevices::class
是我的自定义处理程序,您可以在其中添加代码以从其他设备注销用户。
创建 App\Actions\Fortify\LogoutOtherDevices
class 如下所示,它将起作用。
<?php
namespace App\Actions\Fortify;
use Illuminate\Support\Facades\Auth;
class LogoutOtherDevices
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param callable $next
* @return mixed
*/
public function handle($request, $next)
{
// logout other devices
Auth::logoutOtherDevices($request->password);
return $next($request);
}
}
这很好用。但这在任何地方都没有记录,所以他们有可能随时改变这种行为。这就是我问这个问题的原因,看看是否有任何其他方法可以做到这一点。
看起来你需要按照他们的文档使用管道。看看https://jetstream.laravel.com/1.x/features/authentication.html#customizing-the-authentication-pipeline
To define your custom pipeline, you may use the Fortify::authenticateThrough method. This method accepts a closure which should return the array of classes to pipe the login request through. Typically, this method should be called from the boot method of your App\Providers\JetstreamServiceProvider class.