使用 Laravel Sanctum 登录 Magic Link

gen*_*tor 1 authentication laravel laravel-sanctum

对于我的项目,我有一组用户只能通过请求 Magic Link 登录。所以他们有一个电子邮件地址,但没有密码。为了避免安全问题,我的目标是无需在 LocalStorage 中保存身份验证令牌即可使其正常工作。

我已经尝试使用 Laravel Sanctum 以以下方式设置它:

  1. 当被要求时,我为用户创建一个令牌并将纯文本版本通过电子邮件发送给他们。
  2. 用户将打开包含查询字符串中的令牌的链接。
  3. 我会将 (Bearer) 令牌与授权标头附加在一起。
  4. 下一步(我假设)是调用使用“auth:sanctum”中间件的自定义 /api/login 端点。Bearer 令牌将对用户进行身份验证,然后我将使用Auth::login(). 在此之后,活动会话将用于对用户进行身份验证,从而避免必须将令牌保存在 localStorage 中。

但是我不能手动调用 Auth::login() 方法而不出现错误(BadMethodCallException: Method Illuminate\Auth\RequestGuard::login does not exist.)

我不知道为什么这不起作用,或者我做错了什么?

Kam*_*aul 7

如果您Sanctum通过电子邮件向用户发送令牌,那么在第一个请求中,您将从 url 获取令牌,您可以使用该令牌登录到这样的应用程序

use Laravel\Sanctum\PersonalAccessToken;
public function login(Request $request)
{
    $personalAccessToken = PersonalAccessToken::findToken($request->token);
    $user = $personalAccessToken->tokenable;
    auth()->login($user);
    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)