返回顶部
首页 > 资讯 > 精选 >laravel passport与手机短信登录结合方法是什么
  • 913
分享到

laravel passport与手机短信登录结合方法是什么

2023-06-22 06:06:05 913人浏览 独家记忆
摘要

本篇内容主要讲解“laravel passport与手机短信登录结合方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel passport与手机短信登录结合方法是什么”吧!准备

本篇内容主要讲解“laravel passport与手机短信登录结合方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel passport与手机短信登录结合方法是什么”吧!

准备步骤

laravel passport 环境

怎么安装 怎么使用 看文档就行 这边就记录下和手机短信的坑 和 如何与 passport 结合

坑一

easy-sms 包 对接腾讯云 请用 1.3 版本 2.0 版本 会一致报错发不出去 我反复测试了好几次 简直是坑死我了 并且 code 如果含有字母 他会提示我的签名有问题 实名 diss 下腾讯云的接口 简直是 无语死了

坑二

判断验证码匹配上,创建一个用户,那么怎么给他 token 呢,百度了一堆方法,什么杂七杂八的都有,什么都试过了 要不只支持 laravel5 点几 要不版本怎么样 要不然怎么样的 简直了

if ($innerVerificationCode==$verificationCode) {  //验证码成功成功,判断是由在数据库中有此手机用户,有立即给他token 没有 创建后给他token  $user=User::query()->where('phone_number', $phoneNumber)->first(); if (!$user) {  $user = new User();  $user->name = $phoneNumber;  $user->phone_number= $phoneNumber;  $user->login_type=User::USER_LOGIN_TYPE_PHONE;  $user->passWord = bcrypt('12345678');  $user->save();  }  return $this->getToken($user, 'id');}// 原本一直在纠结如何不用账号密码直接给他 access_token 但是种种原因不是失败了吗 那就 api 请求下public function getToken($user, $type)    {        $Http = new \GuzzleHttp\Client();        $response = $http->post(config('app.url').'/api/fund/oauth/token', [            'fORM_params' => [                'grant_type' => 'password',                'username' => $user->$type,//用户可以直接登录的用户名,配置后也可以是邮箱,5.8版本,这个默认是注册后的邮箱                'password' => '12345678',//用户名对应的密码                'scope' => '*',            ],        ]);        return  JSON_decode($response->getBody(), false);    }

access_token 接口的代码如下:

<?PHPnamespace App\Http\Controllers\Api;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Hash;use Psr\Http\Message\ServerRequestInterface;use \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;use Validator;class AccessTokenController extends \Laravel\Passport\Http\Controllers\AccessTokenController{        public function issueToken(ServerRequestInterface $rawRequest)    {        //获取传入参数        $request = collect($rawRequest->getParsedBody());        $validator = Validator::make($request->all(), [            'username' => 'required',            'password' => 'required',        ])->validate();        $checkUser = \App\Models\User::where("id", $request->get("username"))->first();        if (!Hash::check($request->get("password"), $checkUser->password)) {            throw new UnauthorizedHttpException('Unauthenticated', "login failed,username error or password error");        }        $oauthClient = DB::table('oauth_clients')->where("password_client", 1)->first();        if (empty($oauthClient)) {            throw new \ErrorException('can not get oauth client information');        }        //获取其他参数        $addRequest = [            'grant_type' => $request->get("grant_type", "password"),            'client_id' => $request->get("client_id", $oauthClient->id),            'client_secret' => $request->get("client_secret", $oauthClient->secret),            'scope' => $request->get("scope", "*"),        ];        //重写传入参数        $newRawRequest = $rawRequest->withParsedBody(array_merge($request->all(), $addRequest));        return parent::issueToken($newRawRequest);    }        public function revokeToken()    {        if(Auth::user()){            $tokenId = Auth::user()->token()->id;            $tokenRepository = app('Laravel\Passport\TokenRepository');            $tokenRepository->revokeAccessToken($tokenId);        }        return response('', 204);    }}

给自己记录下 这个文章的文笔不好,随便记录下 现在时间忙

找到了另一种 更好的

<?phpnamespace App\Traits;//这里请引用自己的User Modeluse App\Models\Users\User;use DateTime;use GuzzleHttp\Psr7\Response;use Illuminate\Events\Dispatcher;use Laravel\Passport\Bridge\AccessToken;use Laravel\Passport\Bridge\AccessTokenRepository;use Laravel\Passport\Bridge\Client;use Laravel\Passport\Bridge\RefreshTokenRepository;use Laravel\Passport\Bridge\Scope;use Laravel\Passport\Passport;use Laravel\Passport\TokenRepository;use League\OAuth3\Server\CrypTKEy;use League\OAuth3\Server\Entities\AccessTokenEntityInterface;use League\OAuth3\Server\Exception\OAuthServerException;use League\OAuth3\Server\Exception\UniqueTokenIdentifierConstraintViolationException;use League\OAuth3\Server\ResponseTypes\BearerTokenResponse;trait PassportToken{        private function generateUniqueIdentifier($length = 40)    {        try {            return bin2hex(random_bytes($length));            // @codeCoverageIgnoreStart        } catch (\TypeError $e) {            throw OAuthServerException::serverError('An unexpected error has occurred');        } catch (\Error $e) {            throw OAuthServerException::serverError('An unexpected error has occurred');        } catch (\Exception $e) {            // If you get this message, the CSPRNG failed hard.            throw OAuthServerException::serverError('Could not generate a random string');        }        // @codeCoverageIgnoreEnd    }    private function issueRefreshToken(AccessTokenEntityInterface $accessToken)    {        $maxGenerationAttempts = 10;        $refreshTokenRepository = app(RefreshTokenRepository::class);        $refreshToken = $refreshTokenRepository->getNewRefreshToken();        $refreshToken->setExpiryDateTime((new \DateTimeImmutable())->add(Passport::refreshTokensExpireIn()));        $refreshToken->setAccessToken($accessToken);        while ($maxGenerationAttempts-- > 0) {            $refreshToken->setIdentifier($this->generateUniqueIdentifier());            try {                $refreshTokenRepository->persistNewRefreshToken($refreshToken);                return $refreshToken;            } catch (UniqueTokenIdentifierConstraintViolationException $e) {                if ($maxGenerationAttempts === 0) {                    throw $e;                }            }        }    }    protected function createPassportTokenByUser(User $user, $clientId)    {        $accessTokenRepository = new AccessTokenRepository(new TokenRepository(), new Dispatcher());        $accessToken = $accessTokenRepository->getNewToken(new Client($clientId, null, null), [new Scope("*")], $user->id);        $accessToken->setIdentifier($this->generateUniqueIdentifier());        $accessToken->setClient(new Client($clientId, null, null));        $accessToken->setExpiryDateTime((new \DateTimeImmutable())->add(Passport::tokensExpireIn()));        $accessTokenRepository->persistNewAccessToken($accessToken);        $refreshToken = $this->issueRefreshToken($accessToken);        return [            'access_token' => $accessToken,            'refresh_token' => $refreshToken,        ];    }    protected function sendBearerTokenResponse($accessToken, $refreshToken)    {        $response = new BearerTokenResponse();        $response->setAccessToken($accessToken);        $response->setRefreshToken($refreshToken);        $privateKey = new CryptKey('file://'.Passport::keyPath('oauth-private.key'),null,false);        $accessToken->setPrivateKey($privateKey);        $response->setPrivateKey($privateKey);        $response->setEncryptionKey(app('encrypter')->getKey());        return $response->generateHttpResponse(new Response);    }        protected function getBearerTokenByUser(User $user, $clientId, $output = true)    {        $passportToken = $this->createPassportTokenByUser($user, $clientId);        $bearerToken = $this->sendBearerTokenResponse($passportToken['access_token'], $passportToken['refresh_token']);        if (! $output) {            $bearerToken = json_decode($bearerToken->getBody()->__toString(), true);        }        return $bearerToken;    }}  $user=User::find(2);        $token =  $this->getBearerTokenByUser($user,6,false);        return $token;

到此,相信大家对“laravel passport与手机短信登录结合方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: laravel passport与手机短信登录结合方法是什么

本文链接: https://lsjlt.com/news/302897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • laravel passport与手机短信登录结合方法是什么
    本篇内容主要讲解“laravel passport与手机短信登录结合方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel passport与手机短信登录结合方法是什么”吧!准备...
    99+
    2023-06-22
  • 腾讯云服务器登录方法是什么啊手机
    使用腾讯云服务器的管理控制台登录 在使用腾讯云服务器时,您可以通过管理控制台登录云服务器。管理控制台提供了一种简单的方式,可以让您直接进入云服务器的管理界面,而不需要在终端上输入复杂的命令。在管理控制台中,您可以选择您需要使用的云服务...
    99+
    2023-10-27
    腾讯 服务器 方法
  • ssh登录云主机的方法是什么
    SSH(Secure Shell)是一种用于远程登录到云主机的安全协议。通过SSH协议,用户可以通过加密的方式登录云主机,并进行文件...
    99+
    2023-08-18
    云主机
  • gitee手机端无法登录的原因和解决方法是什么
    这篇“gitee手机端无法登录的原因和解决方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“gitee手机端无法登录的...
    99+
    2023-07-05
  • nginx与node.js结合使用的方法是什么
    本文小编为大家详细介绍“nginx与node.js结合使用的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“nginx与node.js结合使用的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。N...
    99+
    2023-07-04
  • 腾讯云服务器登录方法是什么啊苹果手机
    腾讯云服务器登录方法可以按照以下步骤进行: 打开浏览器,在登录界面中,输入账号及密码。 点击进入云服务器管理页面。 输入您的账户和密码,并点击“登录”按钮。 如果您已经创建了云服务器(腾讯云服务器或其他名称),并且已经成功连接到您的账户...
    99+
    2023-10-27
    腾讯 苹果 服务器
  • 云主机登录设置的方法是什么
    云主机登录设置的方法可以分为以下几种:1. 使用SSH密钥对登录:这是最常见的登录方式,需要在创建云主机时生成SSH密钥对,并将公钥...
    99+
    2023-09-20
    云主机
  • 远程登录云主机的方法是什么
    远程登录云主机的方法:1、下载ssh登录客户端,输入IP地址登录;2、输入远程连接的端口;3、然后点击打开,输入账号和密码即可远程登...
    99+
    2023-02-09
    远程登录云主机 云主机
  • 云主机多人登录的方法是什么
    云主机多人登录的方法可以通过以下几种方式实现:1. 使用远程桌面协议(Remote Desktop Protocol,简称RDP):...
    99+
    2023-08-18
    云主机
  • 腾讯云服务器登录方法是什么啊手机怎么设置
    1. 登录腾讯云服务器 要登录腾讯云服务器,您需要使用 SSH 客户端。如果您使用的是 Windows 操作系统,可以使用 PuTTY 或 Xshell 等 SSH 客户端。如果您使用的是 Mac 或 Linux 操作系统,则可以使用终端...
    99+
    2023-10-27
    腾讯 服务器 方法
  • 微信电脑版快速登录的方法是什么
    微信电脑版快速登录的方法是通过扫描手机上的二维码来实现的。具体步骤如下:1. 打开微信手机App,点击右上角的加号图标,选择“扫一扫...
    99+
    2023-10-18
    电脑
  • ssh免费登录云主机的方法是什么
    要实现SSH免费登录云主机,可以使用以下方法:1. 使用密钥登录:在云主机创建时,生成一对公钥和私钥。将公钥上传到云主机上的~/.s...
    99+
    2023-09-20
    ssh 云主机
  • python远程登录云主机的方法是什么
    Python远程登录云主机有多种方法,以下是其中的一些常见方法:1. 使用paramiko库:paramiko是一个纯Python实...
    99+
    2023-08-20
    云主机 python
  • 腾讯云服务器登录方法是什么意思呀苹果手机怎么登陆
    打开腾讯云服务器的官网,进入主页面,找到“登录页面”选项。 在登录页面的右侧,有一个“忘记密码”选项,点击进入。 在这里,需要输入当前登录的账号和密码,并点击“获取验证码”按钮,以便接收腾讯云服务器发送的登录验证码。 输入验证码后,点击“...
    99+
    2023-10-28
    腾讯 苹果 服务器
  • 腾讯云服务器登录方法是什么意思呀苹果手机
    登录腾讯云服务器需要使用相应的客户端软件或者网页登录方式。使用客户端登录时,需要下载并安装相应的客户端软件,然后打开浏览器输入服务器IP地址并点击登录按钮即可。在使用过程中,需要注意保持手机号码、密码、验证码等信息的输入正确,并注意保存好登...
    99+
    2023-10-27
    腾讯 苹果 服务器
  • 云主机远程登录用户名更改的方法是什么
    云主机远程登录用户名的更改方法如下:1. 使用SSH远程连接到云主机。2. 使用当前的用户名和密码登录到云主机。3. 以root或管...
    99+
    2023-08-18
    云主机
  • GoLang jwt无感刷新与SSO单点登录限制解除的方法是什么
    这篇文章主要介绍了GoLang jwt无感刷新与SSO单点登录限制解除的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇GoLang jwt无感刷新与SSO单点登录限制解除的方法是什...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作