【发布时间】:2021-07-06 15:17:42
【问题描述】:
如果我通过护照登录到我的外部应用程序,如许多教程中所示:
public function login(Request $request)
{
$data=$request->all();
$validator = Validator::make($data, [
'email' => 'email|required',
'password' => 'required'
]);
if($validator->fails()){
return response()->json(['error' => $validator->errors(), 'Validation Error',400]);
}
if (!auth()->attempt($data)) {
return response(['message' => 'Invalid Credentials'],400);
}
$accessToken = auth()->user()->createToken('authToken')->accessToken;
return response()->json(['user' => auth()->user(), 'access_token' => $accessToken], 200);
}
我已经阅读了很多帖子、howto 并看过一些视频,但是在这种情况下没有明确的注销用户的程序,并且 laravel 的手册没有说明任何内容(为什么?或者它在哪里)。
我找到了可能的解决方案:
auth()->user()->token()->revoke();$request->user()->token()->revoke();auth()->logout();$request->session()->invalidate();
其中哪些执行注销的权限步骤? 我的方法应该类似于:
public function logout(Request $request) {
//auth()->user()->token()->revoke();
//$request->user()->token()->revoke();
// auth()->logout();
//$request->session()->invalidate();
return response()->json(['message' => 'User successfully signed out'], 200);
}
而且粗略应该是:
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth:api');
还是我错了???
如果用户未通过身份验证以查看资源,如何不重定向到登录路由? 如果我发回:
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
response()->json(['mex'=>'not authorized'], 401);
}
}
}
不起作用并给我发回错误:
ErrorException: 标头不能包含多个标头,新的 在文件中检测到的行 ...../vendor/symfony/http-foundation/Response.php 在第 359 行
【问题讨论】:
标签: json api laravel-8 laravel-passport