【laravel5.5+Passport】laravel5的前后端分離之Passport設計


項目中使用到了laravel5的passport組件,進行前后端分離的 api認證部分:

前后端分離的api認證,我們用的是:

【密碼授權令牌】,需要用戶登錄->指定client_id/client_secret->生成token+refresh_token->返回前端->在xml的header['Auth'] 添加token。

 

1、官方文檔:https://learnku.com/docs/laravel/5.5/passport/1309#personal-access-tokens

2、社區推薦文章:https://learnku.com/articles/6976/laravel-55-uses-passport-to-implement-auth-authentication#reply118969 (推薦)

3、錯誤解決文章:https://cloud.tencent.com/developer/ask/199607

4、調試參考文章:https://learnku.com/laravel/t/22586  -- postman一步一步來

 

4、目的,實現前后端分離api的token認證。

5、其實我個人認為 api認證這塊沒有第三方沒必要用passport,jwt或者自定義token都可以,因為passport主要用於oauth2,也就是三方交互,而單純的前后端分離 只有兩方。

6、按照步驟2來基本不會又問題,下面貼幾個要點:

1)Guzzle\http的client只能訪問網絡上【真實】存在的域名或ip:port,本地創建的虛擬域名、127.0.0.1和localhost訪問是不行滴

2)username不是users表的username字段,默認是users的email字段,當然你可以修改成username字段,詳見下面步驟7

3)已知laravel5.5及以后,users表的password必須是默認的hash::make 加密,不能是bcrypt加密,前台登錄時候僅需提供123456類似密碼即可,passport內部自動進行hash_check對比。

4)將步驟2中的 /api/oauth/token,修改為 /oauth/token 

 

7、修改passport默認的email認證字段,我們改為username或者任意其他phone都可以,如下:App\User.php模型增加

    /**
    * 取消passport默認使用email+password作用驗證條件
    * @param : $username --- request()->input('username')
    * @return : usermodel
    * date: 2019年11月27日下午3:02:13
    * author: xzz
    */
    public function findForPassport($username)
    {
        $credentials = [];
        filter_var($username, FILTER_VALIDATE_EMAIL)?$credentials['email'] = $username:$credentials['username'] = $username;
        
        return self::where($credentials)->first();
    }

8、demo在laravel5.5的app\http\controllers\PassportController.php里面。

9、效果:

10、驗證token,直接使用系統的auth:api中間件進行認證即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM