国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Laravel實現短信注冊的示例代碼

Laravel實現短信注冊的示例代碼

2019-09-30 17:16劍歌丶君 PHP教程

這篇文章主要介紹了Laravel實現短信注冊的示例代碼,使用云片短信平臺,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

正在公司做一個商城項目,由于只有一個后臺,所以注冊用短信注冊也就輪到我來做的。剛剛開始,我內心還是有點虛的,還好有 Laravel-china 社區的 summer 大神,寫的書。在里面參考了它的寫法和思路,并且用了 easy-sms 包,這才用了半個下午的時間,順利的做出來了,晚上趕緊和大家分享一波了。

1、確定短信運營商

我看到大佬都是用的云片,我也就毫不猶豫的大力推薦公司用這個短信平臺了,不過其他的也可以咯。

首先自己注冊一個帳號,然后找到這個

 

 

Laravel實現短信注冊的示例代碼

點擊開始接入,完成新手引導過程。

 

 

Laravel實現短信注冊的示例代碼

第二部的簽名和模板必須填寫,類似我下面填寫的這樣

 

 

Laravel實現短信注冊的示例代碼

 

 

Laravel實現短信注冊的示例代碼

值得注意的是這個模板必須和你到時候用 easy-sms 包的時候,設定的短信內容必須和這個一模一樣,不然會報錯的。

還有就是記得一定得拿到APIKEY。到時候,在env里進行配置。

# 云片
YUNPIAN_API_KEY=9c60bdd**********

2、安裝 easy-sms 包

利用這個包,可以快速的實現短信發送功能。

composer require "overtrue/easy-sms"

由于該組件還沒有 Laravel 的 ServiceProvider ,為了方便使用,我們可以自己封裝一下。

首先在 config 目錄中增加 easysms.php 文件

在 config/easysms.php 填寫如下內容。

<?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'),
  ],
 ],
];

然后創建一個 ServiceProvider

php artisan make:provider EasySmsServiceProvider

修改文件 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');
 }
}

最后在 config/app.php 在 providers 里增加剛剛創建的服務寫進去,App\Providers\EasySmsServiceProvider::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、創建路由和對應的控制器

首先創建路由,我們需要一個ajax請求短信驗證碼的方法,和一個進行確認注冊的邏輯方法,如下:

Route::group(['prefix' => 'verificationCodes', 'as' => 'verificationCodes.'], function() {
  Route::post('register', 'VerificationCodesController@register')->name('register');
  Route::get('ajaxregister', 'VerificationCodesController@ajaxregister')->name('ajaxregister');
 });

路由創建好了,我們用命令生成controller了

php artisan make:controller Home\VerificationCodesController

再直接在里面寫 register 和 ajaxregister 方法了

代碼邏輯

修改文件

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

這樣,用戶就能收到短信,并且前端應該保存這個 key ,提交注冊表單的時候傳遞給后臺,判斷是否已經過期。下面就是判斷是否過期,驗證碼是否錯誤。

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', '注冊成功!');
 
}

上面的 hash_equals 是可防止時序攻擊的字符串比較的~

以上就是我整個的過程。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 福利片在线观看 | 亚洲视频精品一区 | 日本中文字幕一区二区 | 一级黄色免费毛片 | 亚洲精品专区 | 在线观看国产视频 | 国产成人片 | 中文字幕在线一区二区三区 | 国产资源在线观看 | 男人的天堂久久 | 日韩欧美国产精品综合嫩v 在线视频 中文字幕 | 日本在线免费观看 | 国产1区2区| 一区二区免费看 | 亚洲自拍小视频 | 国产精品日韩一区 | 精品天堂| 国产一区二区三区免费在线 | 亚洲一区二区免费视频 | 欧美a在线 | 黄色小视频在线免费观看 | 国产精品国产精品国产专区不片 | 成人av免费观看 | 免费的av网站 | heyzo 在线 | 成人福利网站 | 精品日韩在线 | 日本免费在线一区 | 欧美国产日韩精品 | 国产中文在线 | 国产成人免费在线 | 亚洲天堂网站 | 91社区在线播放 | 亚洲黄网在线观看 | 欧美一级特黄视频 | 久久亚洲一区二区三区明星换脸 | 久久精品国产一区二区三区不卡 | 九九热精品视频在线观看 | 国产精品久久久久久久久久久久久 | 高清av一区 | 男女全黄一级一级高潮免费看 |