> 백엔드 개발 > PHP 문제 > PHP 휴대폰 인증 코드 구현 방법

PHP 휴대폰 인증 코드 구현 방법

藏色散人
풀어 주다: 2023-03-08 14:20:01
원래의
4464명이 탐색했습니다.

PHP 휴대폰 인증 코드 구현 방법: 먼저 클라우드 필름 및 개발 정보 인증을 등록하고 템플릿을 설정한 다음 "easysms.php" 파일에 "'default'=>[]" 및 기타 내용을 추가하세요. 그런 다음 슬라이스의 클라우드 API_KEY를 얻고 마지막으로 컨트롤러 코드를 통해 확인 코드를 얻습니다.

PHP 휴대폰 인증 코드 구현 방법

이 문서의 운영 환경: Windows 7 시스템, PHP7.1, Dell G3 컴퓨터.

PHP SMS 인증코드 구현 과정에 대한 자세한 설명

제 블로그(Laravel) 등록 섹션에 휴대폰 번호를 사용하여 등록했는데, SMS 인증코드를 보내야 합니다.

Yunpian의 SMS 서비스 제공업체를 이용하세요. 물론 특정 SMS 서비스 제공업체를 자유롭게 선택할 수 있습니다.

1. 구현 과정

휴대폰 번호를 입력하고 클릭하여 인증 코드를 받으세요
정확한 SMS 인증 코드를 제출하면 등록이 완료됩니다

2. 구현 아이디어 맵

3. 클라우드 필름 등록, 개발 정보 인증 및 템플릿 설정에 대해서는 여기서 자세히 설명하지 않습니다. [권장: "PHP 비디오 튜토리얼"]

4 easy-sms를 설치합니다. An Zhengchao가 작성한 문자 메시지 전송 구성요소입니다. 이 구성요소를 사용하면 SMS 전송 기능을 빠르게 구현할 수 있습니다.

composer require "overtrue/easy-sms"
//新建配置文件
touch config/easysms.php
로그인 후 복사

그런 다음 easysms.php 파일에 다음 콘텐츠를 추가하세요.

 <?php

  return [

    &#39;timeout&#39;=>5.0,
    &#39;default&#39;=>[
      // 网关调用策略,默认:顺序调用
      &#39;strategy&#39; => \Overtrue\EasySms\Strategies\OrderStrategy::class,

      // 默认可用的发送网关
      &#39;gateways&#39; => [
        &#39;yunpian&#39;,
      ],
    ],
    // 可用的网关配置
    &#39;gateways&#39; => [
      &#39;errorlog&#39; => [
        &#39;file&#39; => &#39;/tmp/easy-sms.log&#39;,
      ],
      &#39;yunpian&#39; => [
        &#39;api_key&#39; => env(&#39;YUNPIAN_API_KEY&#39;),
      ],
    ],

];
로그인 후 복사

그런 다음 ServiceProvider를 만듭니다

php artisan make:provider EasySmsServiceProvider
로그인 후 복사

파일을 수정하세요

app/providers/EasySmsServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Overtrue\EasySms\EasySms;

class EasySmsServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap services.
   *
   * @return void
   */
  public function boot()
  {
    //
  }

  /**
   * Register services.
   *
   * @return void
   */
  public function register()
  {
    $this->app->singleton(EasySms::class,function ($app){

      return new EasySms(config(&#39;easysms&#39;));

    });

    $this->app->alias(EasySms::class,&#39;easysms&#39;);
  }
}
로그인 후 복사

마지막으로 config/app.php를 열고 AppProvidersEasySmsServiceProvider를 추가하세요. 공급자::class,

5. 클라우드 조각의 API_KEY를 가져옵니다. 코드와 키를 캐시에 저장하세요)

public function getVerificationCode($request)
  {
    if(FALSE === $this->validateApiRequest($request->all(),
        [&#39;mobile&#39; => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;],[
          &#39;mobile.required&#39;=>&#39;请输入手机号&#39;,
          &#39;mobile.regex&#39;=>&#39;手机号格式不正确&#39;,
          &#39;mobile.unique&#39;=>&#39;手机号已存在&#39;
        ])){
      return false;
    }

    $mobile = trim($request->get(&#39;mobile&#39;));
    $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);


    try{
       $easySms->send($mobile,
        [&#39;content&#39;=>"【UKNOW】您的验证码是{$code}。如非本人操作,请忽略本短信"]       );

    }catch(\GuzzleHttp\Exception\ClientException $exception){

      $response = $exception->getResponse();
      $result =json_decode($response->getBody()->getContents(),true);
      $this->setMsg($result[&#39;msg&#39;]?? &#39;短信发送异常&#39;);
      return false;
    }

    $key = &#39;verificationCode&#39;.str_random(15);
    $expiredAt = now()->addMinutes(1);
    Cache::put($key,[&#39;mobile&#39;=>$mobile,&#39;code&#39;=>$code],$expiredAt);

    return [
      &#39;verification_key&#39;=>$key,
      &#39;expiredAt&#39;=>$expiredAt->toDateTimeString(),
      &#39;verification_code&#39;=>$code
      ];
}
로그인 후 복사

7. 인증코드 비교

public function userStore($mobile, $verification_key,$code,$password,$password_confirmation)
 {

  $params = [
   &#39;mobile&#39;=>$mobile,
   &#39;verification_key&#39;=>$verification_key,
   &#39;code&#39;=>$code,
   &#39;password&#39;=>$password,
   &#39;password_confirmation&#39;=>$password_confirmation
  ];
  //参数判断
  if (
   FALSE === $this->validateApiRequest($params, [
    &#39;mobile&#39; => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;,
    &#39;code&#39; => &#39;required&#39;,
    &#39;verification_key&#39;=>&#39;required&#39;,
    &#39;password&#39;  => &#39;required|min:6|confirmed&#39;,
    &#39;password_confirmation&#39; => &#39;required&#39;,
   ], [
    &#39;mobile.required&#39; => &#39;请输入手机号&#39;,
    &#39;mobile.regex&#39; => &#39;手机号格式不正确&#39;,
    &#39;mobile.unique&#39; => &#39;手机号已存在&#39;,
    &#39;code.required&#39; => &#39;请输入短信验证码&#39;,
    &#39;password.required&#39; => &#39;请输入密码&#39;,
    &#39;password.min&#39;   => &#39;密码不得小于6位&#39;,
    &#39;password.confirmed&#39; => &#39;密码前后不一致&#39;,
    &#39;password_confirmation.required&#39;=>&#39;请再次输入密码&#39;,
    &#39;verification_key.required&#39;=>&#39;请输入短信验证码&#39;
   ])
  ) {
   return false;
  }

  $verifyData = Cache::get($verification_key);
  if( !$verifyData){
   $this->setMsg(&#39;验证码已失效&#39;);
   return false;
  }
  if(!hash_equals($code,(string)$verifyData[&#39;code&#39;])){
   $this->setMsg(&#39;验证码错误&#39;);
   return false;
  }

  Cache::forget($verification_key);
  $user = User::create([
   &#39;mobile&#39;=>$mobile,
   &#39;password&#39;=>bcrypt($password)
  ]);
  if(!$user){
   $this->setMsg(&#39;注册失败&#39;);
   return false;
  }
  return true;
}
로그인 후 복사

위의 과정은 휴대폰 인증코드의 기본 단계입니다.

위 내용은 PHP 휴대폰 인증 코드 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿