Heim > PHP-Framework > Laravel > Teilen Sie Laravel Passport Pitfall Diary

Teilen Sie Laravel Passport Pitfall Diary

藏色散人
Freigeben: 2020-09-07 09:13:07
nach vorne
3153 Leute haben es durchsucht

werde ich das Schneidetagebuch von Laravel Passport mit Ihnen teilen. Ich hoffe, dass es Freunden, die es brauchen, hilfreich sein wird!

Die meisten früheren Projekte verwendeten DingoAPI + JWT-auth, um die API-Authentifizierung zu implementieren. Obwohl Laravel Passport sehr früh veröffentlichte, wurde ihm nicht viel Aufmerksamkeit geschenkt.

Ich habe heute Passport in die Hand genommen, obwohl ich auf viele Fallstricke gestoßen bin, ist es immer noch sehr einfach zu verwenden~Teilen Sie Laravel Passport Pitfall Diary

Pit 1: Im Moment möchte ich nur token bekommen

Passport bietet seit seiner Einführung viele Routen. . Aber die meisten dieser Dinge sind für mich wirklich nutzlos
Lösung:Definieren Sie es in Ihrem AuthServiceProvider neu:token

Passport 一出生就自带了很多的路由。。 but,这些东东大部分对我是真的没用啊
解决方案:
在你的 AuthServiceProvider  里重新定义:

Passport::routes(function (RouteRegistrar $router) {
            $router->forAccessTokens();
        }, ['prefix' => 'api']);
Nach dem Login kopieren

坑2: 注册账号时,如何手动生成 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);
    }
Nach dem Login kopieren

执行,获得返回

{
  "token_type": "Bearer",
  "expires_in": 1296000,
  "access_token": "xxx",
  "refresh_token": "xxx"
}
Nach dem Login kopieren

完美解决。

坑3:我想要使用手机号登录

Passport 其实已经提供了动态修改用户登录的接口,只不过没有在文档里写出来
解决方案:
在你的 User Model 里增加如下方法

public function findForPassport($login) {
        return User::orWhere('email', $login)->orWhere('mobile', $login)->first();
    }
Nach dem Login kopieren

坑4: 当使用错误的 token 时, passport 总会跳转到 login 方法

查看源码发现 passport 用的是 web auth 中间件,难怪如此
在你的请求头里增加 Accept:application/jsonrrreee


Pit 2: So registrieren Sie manuell ein Konto. Generieren Sie einen Token code> ?<br>

Teilen Sie Laravel Passport Pitfall Diaryjwt-auths JWTAuth::fromUser($user); kann problemlos token generieren, aber es scheint keine vorgefertigte Methode zu geben im Reisepass. Lösung: 🎜Fordern Sie nach der Registrierung des Kontos aktiv erneut oauth/token🎜rrreee🎜 an, führen Sie es aus und erhalten Sie die Rückgabe 🎜rrreee🎜Perfekte Lösung. 🎜

🎜Pit 3: Ich möchte mich mit meiner Mobiltelefonnummer anmelden🎜

🎜Passport bietet tatsächlich eine Schnittstelle zum dynamischen Ändern der Benutzeranmeldung, diese steht jedoch nicht im Dokument🎜Lösung: 🎜In Ihrem Benutzer Fügen Sie dem Modell die folgende Methode hinzu🎜rrreee

🎜Pit 4: Bei Verwendung des falschen token springt Passport immer zur Anmeldemethode🎜

🎜Sehen Sie sich den Quellcode an und finden Sie ihn Passport verwendet web auth Middleware, kein Wunder, dass es so ist🎜Fügen Sie Accept:application/json in Ihren Anforderungsheader ein, um das Problem zu lösen🎜Für Beispiel:🎜🎜🎜

Das obige ist der detaillierte Inhalt vonTeilen Sie Laravel Passport Pitfall Diary. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage