如何解决撤销、无效、删除或授权注销以使用户在受保护的护照 api 中注销是否正确
如果我通过护照登录到我的外部应用程序,如许多教程所示:
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: Header 不能包含一个以上的 header,new 在文件中检测到行 ...../vendor/symfony/http-foundation/Response.php 第 359 行
解决方法
退出 此外,如果您使用过护照,请检查您的数据库中是否有“oauth_access_tokens”表。
public function logout(Request $request) {
DB::table('oauth_access_tokens')->where('user_id',Auth::id())->delete();
return response()->json(['message' => 'User successfully signed out'],200);
}
并且路线应该是:-
Route::group('middleware'=>['auth:api'],function(){
Route::post('logout',[AuthController::class,'logout'])->name('logout');
});
如果用户未通过身份验证:-
将下面的代码添加到 App\Exceptions\Handler.php
use Illuminate\Auth\AuthenticationException;
use Illuminate\Support\Facades\Auth;
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request,AuthenticationException $exception)
{
$current_gaurd = array_get($exception->guards(),0);
$route = route('login');
// if ($current_gaurd == 'admin') {
// $route = route('admin.login');
//}
return $request->expectsJson()
? response()->json(['meta' => ['messsage' => $exception->getMessage()]],401)
: redirect()->guest($route);
}
另外,将所有路由放在中间件 AUTH 组中,用户未通过身份验证
希望对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。