美文网首页Laravel
Laravel Passport 密码模式

Laravel Passport 密码模式

作者: zshanjun | 来源:发表于2017-04-18 19:30 被阅读323次

    前言:laravel passport 密码模式作为网站前后端分离后API验证登录的一种解决方案,本文主要记录这个过程中遇到的一些问题。

    安装

    laravel passport要求laravel版本大于等于5.3,因此必须把低于此要求的框架升级到5.3,具体做法可以参考上一篇博客。

    升级完后,使用composer require laravel/passport=~1.0即可安装passport

    按照官方文档指导,注册service provider、注册路由和引入HasApiToken等即可,在这里不再赘述。

    遇到的问题

    第一个问题:由于各种原因,用来对用户进行登录验证的字段和laravel默认往往不一样。这时候就要自定义登录的用户名和密码。

    解决方案:

    在用户模型里面添加一下两个方法,分别用来做用户名验证和密码验证:

    /**
         * passport 验证用户名
         * @param $username
         * @return mixed
         */
        public function findForPassport($username) {
            return $this->where('FName', $username)->first();
        }
    
        /**
         * passport 验证密码
         * @param $password
         * @return bool
         */
        public function validateForPassportPasswordGrant($password)
        {
            return $this->FPwd == md5($password);
        }
    
    

    第二个问题:跨域问题

    解决方案:推荐直接使用barryvdh/laravel-cors扩展包

    第三个问题:获取到access_token后,用来访问受保护的资源时,会自动跳转到首页

    解决方案:这是由于从5.2升级到5.3后,没有更新.htaccess文件所致,将一下两行内容添加到末尾即可:

        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} ^(.*)
        RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
        
    

    第四个问题:laravel只能验证session登录或passport登录,不能自动识别两种不同的请求

    解决方案:
    首先,要确保config/auth.php文件配置正确(因为从5.1升级而来的系统会发生了非常大的变化),这个文件里面default.guards的值会影响到laravel默认的验证方式。
    这个问题也是由于升级框架后的历史遗留问题,需要将auth更改为:

    //'auth' => \App\Http\Middleware\Authenticate::class,
    
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,`
    
    
    

    参考网站:

    相关文章

      网友评论

        本文标题:Laravel Passport 密码模式

        本文链接:https://www.haomeiwen.com/subject/zbsqzttx.html