Heim >Backend-Entwicklung >PHP-Tutorial >So implementieren Sie die SMS-Registrierung in Larav
In diesem Artikel wird hauptsächlich der Beispielcode für die SMS-Registrierung mit Laravel unter Verwendung der Yunpian SMS-Plattform vorgestellt. Der Inhalt ist ziemlich gut und dient als Referenz.
Ich arbeite in meinem Unternehmen an einem Einkaufszentrum-Projekt. Da es nur ein Backend gibt, bin ich an der Reihe, mich per SMS zu registrieren. Am Anfang war ich innerlich noch etwas schwach, aber zum Glück gab es ein Buch, geschrieben vom Laravel-china
Meister der Communitysummer
. Ich habe darin auf die Schreibmethode und die Ideen hingewiesen und das easy-sms
-Paket verwendet. Es hat nur einen halben Nachmittag gedauert, bis ich es am Abend mit allen geteilt habe.
1. Bestimmen Sie den SMS-Betreiber
Ich habe gesehen, dass die Großen alle Yunqian verwenden, also habe ich nicht gezögert, es zu verwenden Wir empfehlen Unternehmen, diese SMS-Plattform zu nutzen, es sind jedoch auch andere verfügbar.
Registrieren Sie zunächst selbst ein Konto und suchen Sie dann dieses
Klicken Sie hier, um den Zugriff zu starten und den Anfängerberatungsprozess abzuschließen.
Die zweite Unterschrift und die Vorlage müssen ausgefüllt werden, ähnlich wie ich es unten ausgefüllt habe
Es ist zu beachten, dass diese Vorlage genau mit dem Textnachrichteninhalt übereinstimmen muss, den Sie bei Verwendung des easy-sms
-Pakets festgelegt haben, andernfalls wird ein Fehler gemeldet.
Denken Sie außerdem daran, APIKEY zu besorgen. Konfigurieren Sie es zu diesem Zeitpunkt in env.
# 云片 YUNPIAN_API_KEY=9c60bdd**********
2. Installieren Sie das easy-sms
-Paket
Verwenden Sie dieses Paket, um die SMS-Versandfunktion schnell zu implementieren.
composer require "overtrue/easy-sms"
Da diese Komponente noch nicht über Laravels ServiceProvider
verfügt, können wir sie aus Gründen der Benutzerfreundlichkeit selbst kapseln.
Fügen Sie zunächst die Datei easysms.php
im Konfigurationsverzeichnis hinzu.
Fügen Sie in config/easysms.php den folgenden Inhalt ein.
<?php return [ // HTTP 请求的超时时间(秒) 'timeout' => 5.0, // 默认发送配置 'default' => [ // 网关调用策略,默认:顺序调用 'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class, // 默认可用的发送网关 'gateways' => [ 'yunpian', ], ], // 可用的网关配置 'gateways' => [ 'errorlog' => [ 'file' => '/tmp/easy-sms.log', ], 'yunpian' => [ 'api_key' => env('YUNPIAN_API_KEY'), ], ], ];
Dann erstellen Sie einen ServiceProvider
php artisan make:provider EasySmsServiceProvider
Ändern Sie die Datei app/providers/EasySmsServiceProvider.php
<?php namespace App\Providers; use Overtrue\EasySms\EasySms; use Illuminate\Support\ServiceProvider; class EasySmsServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->singleton(EasySms::class, function ($app) { return new EasySms(config('easysms')); }); $this->app->alias(EasySms::class, 'easysms'); } }
Endlich in config/app.php
in providers
Fügen Sie den gerade erstellten Dienst hinzu und schreiben Sie ihn ein, AppProvidersEasySmsServiceProvider::class,
App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\EasySmsServiceProvider::class, //easy-sms
3 Erstellen Sie die Route und den entsprechenden Controller
Erstellen Sie zuerst die Route, wir Wir benötigen eine Ajax-Methode, um den SMS-Bestätigungscode anzufordern, und eine logische Methode, um die Registrierung zu bestätigen, wie folgt:
Route::group(['prefix' => 'verificationCodes', 'as' => 'verificationCodes.'], function() { Route::post('register', 'VerificationCodesController@register')->name('register'); Route::get('ajaxregister', 'VerificationCodesController@ajaxregister')->name('ajaxregister'); });
Die Route wird erstellt, wir verwenden den Befehl, um den Controller zu generieren
php artisan make:controller Home\VerificationCodesController
und dann direkt darin schreiben register
und ajaxregister
Methoden
Codelogik
Ändern Sie die Datei
app/ Home/VerificationCodesController.php
<?php . . . use Overtrue\EasySms\EasySms; use App\Models\System\User; class VerificationCodesController extends Controller { // 这里验证就不写了。 public function ajaxregister(VerificationCodeRequest $request, EasySms $easySms) { //获取前端ajax传过来的手机号 $phone = $request->phone; // 生成4位随机数,左侧补0 $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT); try { $result = $easySms->send($mobile, [ 'content' => "【安拾商城】您的验证码是{$code}。如非本人操作,请忽略本短信" ]); } catch (Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) { $response = $exception->getExceptions(); return response()->json($response); } //生成一个不重复的key 用来搭配缓存cache判断是否过期 $key = 'verificationCode_' . str_random(15); $expiredAt = now()->addMinutes(10); // 缓存验证码 10 分钟过期。 \Cache::put($key, ['mobile' => $mobile, 'code'=> $code], $expiredAt); return response()->json([ 'key' => $key, 'expired_at' => $expiredAt->toDateTimeString(), ], 201); }
Auf diese Weise kann der Benutzer die Textnachricht empfangen, und das Frontend sollte diese speichern key
und beim Absenden des Registrierungsformulars zur Ermittlung an das Backend übergeben ob es abgelaufen ist. Im Folgenden wird festgestellt, ob es abgelaufen ist und ob der Bestätigungscode falsch ist.
public function register(VerificationCodeRequest $request) { //获取刚刚缓存的验证码和key $verifyData = \Cache::get($request->verification_key); //如果数据不存在,说明验证码已经失效。 if(!$verifyData) { return response()->json(['status' =>0, 'message'=> '短信验证码已失效'], 422); } // 检验前端传过来的验证码是否和缓存中的一致 if (!hash_equals($verifyData['code'], $request->verification_code) { return redirect()->back()->with('warning', '短信验证码错误'); } $user = User::create([ 'mobile' => $verifyData['mobile'], 'password' => bcrypt($request->password), ]); // 清除验证码缓存 \Cache::forget($request->verification_key); return redirect()->route('login')->with('success', '注册成功!'); }
Das Obige hash_equals
ist ein String-Vergleich, der Timing-Attacken verhindern kann~
Das Obige ist mein gesamter Prozess.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Verwenden Sie Laravel, um die Gravatar-Avatar-Adresse zu generieren
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die SMS-Registrierung in Larav. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!