适用于 Laravel Passport 短信授权

适用于 Laravel Passport 短信授权

这个包可以让 Laravel Passport 支持短信验证码登录。

安装

可以通过Composer安装此软件包。

composer require larva/laravel-passport-sms -vv

如何使用

  • https://your-site.com/oauth/token 发出 POST 请求, 就像您需要密码或刷新授权一样。
  • POST 正文应包含 grant_type = sms
  • 该请求将被路由到您的 User::findForPassportSmsRequest() 函数, 在该函数中,您将自己确定是否应授予访问权限。
  • 如果成功,将返回一个 access_token 和 refresh_token 。

请求

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'sms',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'phone' => '13800138000', 
        'verifyCode' => 'SMS verifyCode',
    ],
]);

例子

这是 User::findForPassportSmsRequest() 方法的样子……

/**
 * Verify and retrieve user by custom token request.
 *
 * @param \Illuminate\Http\Request $request
 *
 * @return \Illuminate\Database\Eloquent\Model|null
 * @throws \League\OAuth2\Server\Exception\OAuthServerException
 */
public function byPassportSmsequest(Request $request)
{
    try {
			Validator::make($request->all(), [
				'phone' => [
					'required',
					'min:11',
					'max:11',
					'regex:/^1[34578]{1}[\d]{9}$|^166[\d]{8}$|^19[89]{1}[\d]{8}$/',
				],
				'verifyCode' => [
					'required',
					'max:6',
					function ($attribute, $value, $fail) use ($request) {
          	if (!SmsVerifyCodeService::make($request->phone)->validate($value, false)) {
            	return $fail($attribute . ' is invalid.');
            }
          },
        ]
       ])->validate();
       return static::phone($request->phone)->first();
      } catch (\Exception $e) {
      	throw OAuthServerException::accessDenied($e->getMessage());
     }
}

在此示例中,该应用程序能够基于提交的JSON负载中的 **phone  verifyCode **属性 对用户进行身份验证。
它将返回null或用户对象。 它还可能会引发异常,解释令牌为什么无效的原因。 
byPassportSmsRequest捕获任何这些异常,并将它们转换为适当的OAuth异常类型。 如果请求有效负载上没有phone ,那么我们将返回null,这将返回 invalid_credentials 错误响应:

{
  "error": "invalid_credentials",
  "message": "The user credentials were incorrect."
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十亿少女梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值