Laravel 문자 등록 을 위 한 예제 코드

6802 단어 Laravel문자 등록
회사 에서 상점 프로젝트 를 하고 있 는데 백 스테이지 가 하나 밖 에 없 기 때문에 등록 용 문자 등록 도 내 가 할 차례 다.처음에 저 는 마음 이 좀 허 했 습 니 다.다행히Laravel-china지역사회 의summer큰 신 이 쓴 책 이 있 었 습 니 다.그 안에서 그의 문법 과 사고방식 을 참고 하고easy-sms가방 을 사 용 했 습 니 다.겨우 반나절 의 시간 이 걸 려 서 순조롭게 만 들 었 습 니 다.저녁 에 여러분 과 빨리 공유 하 겠 습 니 다.
1.문자 운영 자 확인
나 는 사내 들 이 모두 구름 을 사용 하 는 것 을 보고 회사 가 이 문자 플랫폼 을 사용 하 는 것 을 주저 하지 않 고 추천 했다.그러나 다른 것 도 괜찮다.
먼저 스스로 계 정 을 등록 한 후에 이것 을 찾 으 세 요.
 
클릭 하여 접속 을 시작 하여 초보 가이드 과정 을 완성 합 니 다.
 
두 번 째 서명 과 템 플 릿 은 반드시 작성 해 야 합 니 다.제 가 아래 에 작성 한 것 과 같 습 니 다.
 

주의해 야 할 것 은 이 템 플 릿 은 반드시 당신 이 그때easy-sms가방 을 사용 해 야 할 때 설 정 된 문자 내용 이 이것 과 똑 같 아야 한 다 는 것 이다.그렇지 않 으 면 잘못 보고 할 것 이다.
그리고 꼭 APIKEY 받 아야 돼.그때 env 에서 설정 합 니 다.

#   
YUNPIAN_API_KEY=9c60bdd**********
2,설치easy-sms패키지
이 가방 을 이용 하면 문자 발송 기능 을 빠르게 실현 할 수 있 습 니 다.

composer require "overtrue/easy-sms"
이 구성 요 소 는 아직 LaravelServiceProvider이 없 기 때문에 편리 하 게 사용 하기 위해 서 우 리 는 스스로 포장 할 수 있 습 니 다.
우선 config 디 렉 터 리 에 파일 추가easysms.phpconfig/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.phpproviders에 방금 만 든 서 비 스 를 추가 하여 기록 합 니 다.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.경로 와 대응 하 는 컨트롤 러 만 들 기
먼저 루트 를 만 듭 니 다.저 희 는 aax 가 문자 인증 코드 를 요청 하 는 방법 과 등록 을 확인 하 는 논리 적 인 방법 이 필요 합 니 다.다음 과 같 습 니 다.

Route::group(['prefix' => 'verificationCodes', 'as' => 'verificationCodes.'], function() {
  Route::post('register', 'VerificationCodesController@register')->name('register');
  Route::get('ajaxregister', 'VerificationCodesController@ajaxregister')->name('ajaxregister');
 });
경로 가 만 들 어 졌 습 니 다.명령 으로 contrller 를 만 들 었 습 니 다.

php artisan make:controller Home\VerificationCodesController
바로 안에registerajaxregister방법 을 적 었 습 니 다.
코드 논리
파일 수정
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는 순차 공격 을 방지 할 수 있 는 문자열 비교 입 니 다~
이상 이 나의 전체 과정 이다.

좋은 웹페이지 즐겨찾기