通过 Sanctum plainTextToken 检索用户
Retrieve user by Sanctum plainTextToken
如何从 Sanctum 令牌中检索 'logged in' 用户。
登录我有以下方法
public function login(Request $request)
{
if (Auth::attempt($request->toArray())) {
/* @var User $user */
$user = $request->user();
$token = $user->createToken('web-token')->plainTextToken;
return response()->json([
'user' => $user,
'token' => $token,
], Response::HTTP_OK);
}
}
现在我使用自定义方法注销。
public function logout(Request $request)
{
dd($request->user()); // <- Always returns null
}
我想撤销令牌,但不知道如何找回当前登录的用户。显然,为了注销,我发送了授权 header,其中 Bearer 和 plainTextToken 作为值。
由于您将 bearer/token 发送到 注销 url 您可以尝试覆盖 AuthenticatesUsers
:
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->user()->tokens()->delete();
return redirect('/');
}
只需在中间件('auth:sanctum')分组路由中添加路由
然后从目标函数内部你可以获得这样的用户 auth()->user()
或者如果您只想注销用户,您可以像这样撤销令牌
$request->user()->currentAccessToken()->delete();
确保您首先在不记名令牌中添加令牌
为了让用户离开 sanctum 中间件,现在令牌是可选的
$user = auth('sanctum')->user();
比登出
if ($user) {
$user->currentAccessToken()->delete();
}
注意:这只删除当前令牌
如果您需要所有令牌,请使用
foreach ($user->tokens as $token) {
$token->delete();
}
如果您不使用默认的 Sanctum 中间件,您可以从纯文本令牌中获取用户,如下所示:
use \Laravel\Sanctum\PersonalAccessToken;
/** @var PersonalAccessToken personalAccessToken */
$personalAccessToken = PersonalAccessToken::findToken($plainTextToken);
/** @var mixed $user */
$user = $personalAccessToken->tokenable;
如何从 Sanctum 令牌中检索 'logged in' 用户。
登录我有以下方法
public function login(Request $request)
{
if (Auth::attempt($request->toArray())) {
/* @var User $user */
$user = $request->user();
$token = $user->createToken('web-token')->plainTextToken;
return response()->json([
'user' => $user,
'token' => $token,
], Response::HTTP_OK);
}
}
现在我使用自定义方法注销。
public function logout(Request $request)
{
dd($request->user()); // <- Always returns null
}
我想撤销令牌,但不知道如何找回当前登录的用户。显然,为了注销,我发送了授权 header,其中 Bearer 和 plainTextToken 作为值。
由于您将 bearer/token 发送到 注销 url 您可以尝试覆盖 AuthenticatesUsers
:
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->user()->tokens()->delete();
return redirect('/');
}
只需在中间件('auth:sanctum')分组路由中添加路由 然后从目标函数内部你可以获得这样的用户 auth()->user() 或者如果您只想注销用户,您可以像这样撤销令牌 $request->user()->currentAccessToken()->delete();
确保您首先在不记名令牌中添加令牌
为了让用户离开 sanctum 中间件,现在令牌是可选的
$user = auth('sanctum')->user();
比登出
if ($user) {
$user->currentAccessToken()->delete();
}
注意:这只删除当前令牌
如果您需要所有令牌,请使用
foreach ($user->tokens as $token) {
$token->delete();
}
如果您不使用默认的 Sanctum 中间件,您可以从纯文本令牌中获取用户,如下所示:
use \Laravel\Sanctum\PersonalAccessToken;
/** @var PersonalAccessToken personalAccessToken */
$personalAccessToken = PersonalAccessToken::findToken($plainTextToken);
/** @var mixed $user */
$user = $personalAccessToken->tokenable;