问答 / 0 / 10 / 创建于 8年前
想问一下用passport来对api进行身份验证的话基本的流程是怎么样的呢?我的理解是前端把用户名和密码等登录需要的信息发个自定义的login路由,login路由再转发给/oauth/token来获取access token,不知道对不对。如果是这样的,那么多种方式的登录在哪一步实现比较好呢?
passport 我自己也在探究能不能使用一种更友好的方式来获取 token,至于多种方式登录的话你可以根据请求的字段来获取 passport 需要的字段,比如手机号登录,可以根据手机号来查询 email,没有就 false,再去请求 token
@小恪守 比如在手机号加验证码登录的情况下,passport就无能为力了,因为passport必须去比对password,又没有办法根绝手机号拿到用户密码的明文,对吧。
@小恪守 你现在也是用我上面说的,前端发给后端,后端再转发给/oauth/token的方式吗?
@zhaohehe Laravel Passport 自定义获取授权用户的实现方案,你可以看看这个
@小恪守 有看过,还是没有办法解决没有密码的情况
是的,不可否认的是在没有密码的情况下不应该使用 password 的认证方式,你可以试试 私人访问令牌,我自己没有尝试过,所以不太清楚。
@小恪守 私人令牌的token好像是永久有效的
@小恪守 我还没用过passport,感觉有点尴尬啊,
还有一种方式:jwt
# vendor\laravel\passport\src\Bridge\UserRepository.php public function getUserEntityByUserCredentials($username, $password, $grantType, ClientEntityInterface $clientEntity) { if (is_null($model = config('auth.providers.users.model'))) { throw new RuntimeException('Unable to determine user model from configuration.'); } if (method_exists($model, 'findForPassport')) { $user = (new $model)->findForPassport($username); } else { $user = (new $model)->where('email', $username)->first(); } if (! $user ) { return; } elseif (method_exists($user, 'validateForPassportPasswordGrant')) { if (! $user->validateForPassportPasswordGrant($password)) { return; } } elseif (! $this->hasher->check($password, $user->password)) { return; } return new User($user->getAuthIdentifier()); }
这个是 passport 中的一小段源码,可以看得到除了 findForPassport 来解决通过其他字段获取用户之外还有 validateForPassportPasswordGrant 来验证该用户的合法性,两个方法都可以在 User Model 中进行定义。
passport
findForPassport
validateForPassportPasswordGrant
User Model
我要举报该,理由是:
passport 我自己也在探究能不能使用一种更友好的方式来获取 token,至于多种方式登录的话你可以根据请求的字段来获取 passport 需要的字段,比如手机号登录,可以根据手机号来查询 email,没有就 false,再去请求 token
@小恪守 比如在手机号加验证码登录的情况下,passport就无能为力了,因为passport必须去比对password,又没有办法根绝手机号拿到用户密码的明文,对吧。
@小恪守 你现在也是用我上面说的,前端发给后端,后端再转发给/oauth/token的方式吗?
@zhaohehe Laravel Passport 自定义获取授权用户的实现方案,你可以看看这个
@小恪守 有看过,还是没有办法解决没有密码的情况
是的,不可否认的是在没有密码的情况下不应该使用 password 的认证方式,你可以试试 私人访问令牌,我自己没有尝试过,所以不太清楚。
@小恪守 私人令牌的token好像是永久有效的
@小恪守 我还没用过passport,感觉有点尴尬啊,
还有一种方式:jwt
这个是
passport中的一小段源码,可以看得到除了findForPassport来解决通过其他字段获取用户之外还有validateForPassportPasswordGrant来验证该用户的合法性,两个方法都可以在User Model中进行定义。