Heim  >  Artikel  >  PHP-Framework  >  Ausfüllen der Boxenunterlagen: Laravel-Pass kombiniert mit Handy-SMS-Login

Ausfüllen der Boxenunterlagen: Laravel-Pass kombiniert mit Handy-SMS-Login

藏色散人
藏色散人nach vorne
2021-12-27 15:17:272214Durchsuche

Die folgende Tutorial-Kolumne von Laravel wird Ihnen die Probleme bei der Kombination von Laravel-Pass und Mobiltelefon-SMS-Anmeldung vorstellen. Ich hoffe, dass sie für alle hilfreich ist!

Vorbereitungsschritte

Laravel Passport-Umgebung

Wie man installiert, wie man es verwendet, lesen Sie einfach die Dokumentation. Hier werden wir die Fallstricke mit mobilen Textnachrichten und die Kombination mit Passport aufzeichnen

Pit One

Easy-SMS-Paket-Docking Bitte verwenden Sie Version 1.3 von Tencent Cloud. Ich habe es mehrmals getestet und es ist wirklich frustrierend. Wenn der Code Buchstaben enthält, wird dies angezeigt ist ein Problem mit meiner Signatur. Die Benutzeroberfläche von Tencent Cloud ist einfach sprachlos

Pit 2

Urteil, dass der Verifizierungscode übereinstimmt, wie man ihm dann einen Token gibt Eine Menge Methoden, es gibt alle möglichen Dinge, ich habe alles versucht. Es spielt keine Rolle, welche Version es ist, sonst ist es einfach so. Der Code der access_token-Schnittstelle lautet wie folgt:

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);
    }

Nimm dir vor, dass das Schreiben dieses Artikels nicht gut ist, nimm einfach auf, dass ich gerade beschäftigt bin

Ich habe einen anderen besseren gefunden

<?php
namespace 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
{
    /**
     * Show User Token
     *
     * 获取用户登录令牌信息
     *
     * @bodyParam username string required 用户名 Example: admin@localhost.com
     * @bodyParam password string required 密码 Example: 123456
     * @bodyParam is_register boolean  是否为注册操作 Example: true
     * @bodyParam subscribe boolean  订阅状态 Example: true
     * @bodyParam grant_type string 授权类型默认password No-example
     * @bodyParam scope string 授权范围默认* No-example
     * @responseFile responses/AccessToken.List.example2.json
     */
    public function issueToken(ServerRequestInterface $rawRequest)
    {
        //获取传入参数
        $request = collect($rawRequest->getParsedBody());
        $validator = Validator::make($request->all(), [
            &#39;username&#39; => &#39;required&#39;,
            &#39;password&#39; => &#39;required&#39;,
        ])->validate();
        $checkUser = \App\Models\User::where("id", $request->get("username"))->first();
        if (!Hash::check($request->get("password"), $checkUser->password)) {
            throw new UnauthorizedHttpException(&#39;Unauthenticated&#39;, "login failed,username error or password error");
        }
        $oauthClient = DB::table(&#39;oauth_clients&#39;)->where("password_client", 1)->first();
        if (empty($oauthClient)) {
            throw new \ErrorException(&#39;can not get oauth client information&#39;);
        }
        //获取其他参数
        $addRequest = [
            &#39;grant_type&#39; => $request->get("grant_type", "password"),
            &#39;client_id&#39; => $request->get("client_id", $oauthClient->id),
            &#39;client_secret&#39; => $request->get("client_secret", $oauthClient->secret),
            &#39;scope&#39; => $request->get("scope", "*"),
        ];
        //重写传入参数
        $newRawRequest = $rawRequest->withParsedBody(array_merge($request->all(), $addRequest));
        return parent::issueToken($newRawRequest);
    }
    /**
     * revoke token
     *
     * 吊销令牌
     *
     */
    public function revokeToken()
    {
        if(Auth::user()){
            $tokenId = Auth::user()->token()->id;
            $tokenRepository = app(&#39;Laravel\Passport\TokenRepository&#39;);
            $tokenRepository->revokeAccessToken($tokenId);
        }
        return response(&#39;&#39;, 204);
    }
}

Verwandte Empfehlungen:
Die neuesten fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonAusfüllen der Boxenunterlagen: Laravel-Pass kombiniert mit Handy-SMS-Login. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen