튜토리얼 칼럼에서는 Laravel Passport의 커팅 일기가 필요한 친구들에게 도움이 되기를 바랍니다!
대부분의 이전 프로젝트에서는 DingoAPI + JWT-auth를 사용하여 API 인증을 구현했지만 Laravel은 Passport를 아주 일찍 출시했지만 이에 대해 많은 관심을 기울이지 않았습니다.오늘 Passport를 뽑았는데 많은 어려움이 있었지만 여전히 사용하기 쉽습니다~
Pit 1: 지금은 계정 비밀번호를 통해 토큰
을 받고 싶습니다
AuthServiceProvider
에서 재정의하세요:token
Passport 一出生就自带了很多的路由。。 but,这些东东大部分对我是真的没用啊
解决方案:
在你的 AuthServiceProvider
里重新定义:
Passport::routes(function (RouteRegistrar $router) { $router->forAccessTokens(); }, ['prefix' => 'api']);
Token
?jwt-auth 的 JWTAuth::fromUser($user);
可以很简单的生成token
,但是在 Passport 里似乎没有现成的方法。
解决方案:
注册完账号后,再一次主动请求 oauth/token
public function register(Request $request) { $validator = $this->validator($request->all()); if ($validator->fails()){ return response()->json($validator->errors()); } event(new Registered($user = $this->create($request->all()))); $client = \DB::table('oauth_clients')->where('password_client', 1)->first(); $request->request->add([ 'username' => $user->email, 'password' => $request->password, 'grant_type' => 'password', 'client_id' => $client->id, 'client_secret' => $client->secret, 'scope' => '*' ]); $proxy = Request::create( 'oauth/token', 'POST' ); return Route::dispatch($proxy); }
执行,获得返回
{ "token_type": "Bearer", "expires_in": 1296000, "access_token": "xxx", "refresh_token": "xxx" }
完美解决。
Passport 其实已经提供了动态修改用户登录的接口,只不过没有在文档里写出来
解决方案:
在你的 User Model 里增加如下方法
public function findForPassport($login) { return User::orWhere('email', $login)->orWhere('mobile', $login)->first(); }
token
时, passport 总会跳转到 login 方法查看源码发现 passport 用的是 web
auth
中间件,难怪如此
在你的请求头里增加 Accept:application/json
rrreee
토큰 생성 code> ?<br>
JWTAuth::fromUser($user);
는 토큰
을 쉽게 생성할 수 있지만 기성 방법은 없는 것 같습니다. 여권에. 해결책: 🎜계정 등록 후 oauth/token
🎜rrreee🎜을 다시 적극적으로 요청하고 실행하면 🎜rrreee🎜완벽한 솔루션을 얻을 수 있습니다. 🎜토큰
을 사용하면 여권은 항상 로그인 메소드로 점프합니다🎜web
auth
미들웨어를 사용하는데, 이런 것도 당연합니다🎜문제를 해결하려면 요청 헤더에 Accept:application/json
을 추가하세요🎜For 예:🎜🎜🎜위 내용은 Laravel Passport Pitfall Diary 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!