angular - 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);
}
}
所以我认为这涵盖了服务器端代码。我需要弄清楚的唯一另一件事是如何正确安全地通知客户端用户已被切换。
我应该发送自定义状态代码吗?如果是这样,在客户端上可以安全收听的安全代码是什么?也许我应该发送一个自定义标题?
解决方案
推荐阅读
- git - 重置命令后强制推送 git 提交不起作用
- react-native - undefined 不是对象(评估“response.data”)
- php - 不能在 Eloquent Query Builder 宏中使用“with”
- xslt - 如何展平文本节点和嵌套节点?
- python - 内存错误:在 python 中从 BLOB 读取大的 .txt 文件时
- batch-file - 将文件移动到单个文件夹 - 带有空格的文件名?
- angularjs - 为什么我使用 $sce.trustAsHtml("");
- git - git log --full-diff,它有什么作用?
- abap - S/4 Hana 中的最佳实践阅读表
- c# - 如何更新 ObservableCollection 中的对象?