【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)Guzzlehttp的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都可以,如下:AppUser.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的apphttpcontrollersPassportController.php里面。

9、效果:

10、验证token,直接使用系统的auth:api中间件进行认证即可。

原文地址:https://www.cnblogs.com/xuzhengzong/p/11939847.html