Cet article présente principalement l'exemple de code pour l'enregistrement SMS à l'aide de Laravel, en utilisant la plateforme SMS Yunpian. Le contenu est assez bon, je vais le partager avec vous maintenant et le donner comme référence.
Je travaille sur un projet de centre commercial dans mon entreprise Comme il n'y a qu'un seul backend, c'est à mon tour de m'inscrire par SMS. Au début, j'étais encore un peu faible intérieurement, mais heureusement il y avait un livre écrit par le Laravel-china
maître de la communauté summer
. J'y ai fait référence à sa méthode d'écriture et à ses idées, et j'ai utilisé le package easy-sms
. Cela ne m'a pris qu'une demi-après-midi pour le réaliser en douceur. Je le partagerai avec tout le monde dans la soirée.
1. Déterminer l'opérateur SMS
J'ai vu que les grands utilisent tous Yunqian, donc je n'ai pas hésité à l'utiliser C'est Il est recommandé aux entreprises d'utiliser cette plateforme de messagerie texte, mais d'autres sont également disponibles.
Enregistrez d'abord un compte vous-même, puis trouvez ceci
Cliquez pour commencer à accéder et terminer le processus d'orientation des novices.
La deuxième signature et le modèle doivent être remplis, similaire à ce que j'ai rempli ci-dessous
Il est à noter que ce modèle doit être exactement le même que le contenu du message texte que vous avez défini lors de l'utilisation du package easy-sms
, sinon une erreur sera signalée.
N'oubliez pas non plus de vous procurer APIKEY. À ce moment-là, configurez-le dans env.
# 云片 YUNPIAN_API_KEY=9c60bdd**********
2. Installez le package easy-sms
Utilisez ce package pour implémenter rapidement la fonction d'envoi de SMS.
composer require "overtrue/easy-sms"
Comme ce composant n'a pas encore le ServiceProvider
de Laravel, pour la commodité d'utilisation, nous pouvons l'encapsuler nous-mêmes.
Ajoutez d'abord le fichier easysms.php
dans le répertoire de configuration
Dans config/easysms.php remplissez le contenu suivant.
<?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'), ], ], ];
Créez ensuite un ServiceProvider
php artisan make:provider EasySmsServiceProvider
Modifiez le fichier 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'); } }
Enfin config/app.php
Ajoutez le service que vous venez de créer dans providers
et écrivez-le, 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. Créez des itinéraires et les contrôleurs correspondants
.Créez d'abord l'itinéraire. Nous avons besoin d'une méthode ajax pour demander le code de vérification SMS et d'une méthode logique pour confirmer l'enregistrement, comme suit :
Route::group(['prefix' => 'verificationCodes', 'as' => 'verificationCodes.'], function() { Route::post('register', 'VerificationCodesController@register')->name('register'); Route::get('ajaxregister', 'VerificationCodesController@ajaxregister')->name('ajaxregister'); });
Une fois l'itinéraire créé, nous utilisons la commande. pour générer le contrôleur
php artisan make:controller Home\VerificationCodesController
Ecrivez les méthodes register
et ajaxregister
directement dedans
Code logique
Modifier le fichier
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); }
De cette façon, l'utilisateur peut recevoir le message texte, et le front-end doit l'enregistrer key
et transmettez-le au backend pour jugement lors de la soumission du formulaire d’inscription. A-t-il expiré ? Ce qui suit consiste à déterminer s'il a expiré et si le code de vérification est erroné.
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', '注册成功!'); }
Ce qui précède hash_equals
est une comparaison de chaînes qui peut empêcher les attaques temporelles~
Ce qui précède est l'ensemble de mon processus.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Utilisez Laravel pour générer l'adresse de l'avatar Gravatar
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!