首页 > 解决方案 > Laravel Passport API 在开发过程中切换用户

问题描述

我有一个带有 Laravel 7.x API 的 Angular 9 SPA,使用 Laravel Passport(个人访问令牌)进行身份验证。在开发过程中,我不时想充当不同的用户来测试身份验证/权限。我不完全知道如何使用 Laravel Passport 干净地做到这一点。

过去,当我的网站是 Laravel 上的 MPA 时,我所要做的就是使用 Auth::loginUsingId() 来充当不同的用户。有谁知道切换用户服务器端而无需处理注销/登录客户端的简单方法?

更新:因此,在研究并尝试找出自定义解决方案之后,我最终创建了一个 AutoLogin 中间件,以确保环境不是生产环境以及是否设置了 AUTO_LOGIN_ID 环境变量。如果为真,那么我将基本上以我想要的用户身份重新登录,而无需进行凭据检查,然后向客户端发送新用户和令牌。这是我的代码:

class AutoLoginMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Only apply this middleware to non-production environments!!
        if( env('APP_ENV') !== 'production' && env('AUTO_LOGIN_ID') ) {

            // Dont do anything if the autologin user is already logged in
            if( Auth::id() === env('AUTO_LOGIN_ID') ) {
                return $next($request);
            }

            // Set the new user
            $authUser = User::find(env('AUTO_LOGIN_ID'));
            Auth::guard('api')->setUser($authUser);
            $token = Auth::guard('api')->user()->createToken('auth_token')->accessToken;

            // Send the new user information as well as the access token to client.
            return response([
                'user' => Auth::guard('api')->user(),
                'access_token' => $token
            ]);
        }
        return $next($request);
    }
}

所以我认为这涵盖了服务器端代码。我需要弄清楚的唯一另一件事是如何正确安全地通知客户端用户已被切换。

我应该发送自定义状态代码吗?如果是这样,在客户端上可以安全收听的安全代码是什么?也许我应该发送一个自定义标题?

标签: angularlaravelapisingle-page-applicationlaravel-passport

解决方案


推荐阅读