>  기사  >  백엔드 개발  >  laravel sms를 사용하여 인증을 위한 SMS 인증코드 전송 기능을 구축합니다.

laravel sms를 사용하여 인증을 위한 SMS 인증코드 전송 기능을 구축합니다.

不言
不言원래의
2018-06-13 14:22:172094검색

이 글에서는 laravel-sms를 사용하여 샘플 코드를 통해 SMS 인증 코드 전송 확인 모듈을 구축하는 방법을 소개합니다. 매우 훌륭하고 참고할 만한 가치가 있습니다.

laravel은 SMS 인증 코드 기능을 구현합니다. . 정보를 검색해 보니 더 인기가 많더군요. 두 가지 패키지가 있습니다.

하나는 laravel SMS 주소 https://github.com/toplan/laravel-sms

하나는 easy SMS 주소 https://github입니다. com/overtrue/easy-sms,

본 프로젝트는 SMS 인증 코드 전송 및 확인 기능을 구현해야 합니다. 이전 방법은 좀 번거로웠어요. 전문가의 조언에 따라 laravel-sms 패키지를 대신 사용할 수 있다는 것을 알았습니다. 구성 및 사용이 쉽습니다. 따라서 이 예는 다음과 같습니다.

이 예제에서는 Laravel 5.5, Api Starter Kit 및 Laravel Sms 2.6을 사용합니다.

이 예시에 사용된 SMS 서비스 제공업체는 Yunpian입니다.

Installation

프로젝트 루트 디렉터리에서 실행(권장):

composer require toplan/laravel-sms:~2.6
composer require toplan/laravel-sms:~2.6

composer.json의 필수 필드에 추가할 수도 있습니다:

"toplan/laravel-sms": "2.6"
"toplan/laravel-sms": "2.6"

그런 다음 프로젝트에서 루트 디렉터리 실행:

composer update
composer update

config/app.php의 공급자 배열에

Toplan\PhpSms\PhpSmsServiceProvider::class,
Toplan\Sms\SmsManagerServiceProvider::class,
Toplan\PhpSms\PhpSmsServiceProvider::class,
Toplan\Sms\SmsManagerServiceProvider::class,

을 추가하고 별칭 배열에

'PhpSms' => Toplan\PhpSms\Facades\Sms::class,
'SmsManager' => Toplan\Sms\Facades\SmsManager::class,
'PhpSms' => Toplan\PhpSms\Facades\Sms::class,
'SmsManager' => Toplan\Sms\Facades\SmsManager::class,

을 추가합니다. :

php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider"
php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"
php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider"
php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"

은 config 폴더에 phpsms.php 및 laravel-sms.php라는 두 개의 구성 파일을 생성합니다.

phpsms.php에서 프록시 정보와 균형 잡힌 일정 계획을 구성할 수 있습니다.

인증 코드 전송 및 인증 체계는 laravel-sms.php에서 구성할 수 있습니다.

동시에 2015_12_21_111514_create_sms_table.php 파일이 데이터베이스 마이그레이션에 복사됩니다. laravel_sms 테이블을 생성하는 데 사용됩니다.

Configuration

여기서는 Yun Pian만을 예로 들어보겠습니다.

phpsms.php를 구성하세요

phpsms.php의 agnets 배열에 클라우드 슬라이스의 프록시 정보를 설정하세요.

'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],
'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],

구성표 배열을 설정하고 균형 잡힌 스케줄링 구성표를 구성하세요.

'scheme' => [
 'YunPian',
],
'scheme' => [
 'YunPian',
],

laravel-sms.php를 구성하세요

내장 라우팅을 설정하세요.

'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],
'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],

요청 간격을 초 단위로 설정하세요.

'interval' => 60,
'interval' => 60,

번호 확인 규칙을 설정하세요.

'validation' => [
 'phone_number' => [ //需验证的字段
 'isMobile' => true, //本字段是否为手机号
 'enable'  => true, //是否需要验证
 'default'  => 'mobile_required', //默认的静态规则
 'staticRules' => [ //全部静态规则
  'mobile_required'  => 'required|zh_mobile',
 ],
 ],
],
'validation' => [
 'phone_number' => [ //需验证的字段
 'isMobile' => true, //本字段是否为手机号
 'enable'  => true, //是否需要验证
 'default'  => 'mobile_required', //默认的静态规则
 'staticRules' => [ //全部静态规则
  'mobile_required'  => 'required|zh_mobile',
 ],
 ],
],

인증 코드 규칙을 설정하세요.

'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],
'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],

인증 코드 내용 SMS를 설정하세요.

'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},
'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},

필요한 경우 데이터베이스 로그를 활성화할 수 있습니다. laravel_sms 테이블을 생성하려면 php artisan migration을 미리 실행해야 합니다.

'dbLogs' => 'ture',
'dbLogs' => 'ture',

API 구현

app/Utils 아래에 새 SmsCodeUtil.php를 생성하고 여기에 인증 코드 전송 및 인증 기능을 구현합니다. 이러한 방식으로 언제든지 다른 클래스를 호출할 수 있어 코드 재사용성이 향상됩니다.

보내기 모듈

다음을 포함하여 보내기 전에 휴대폰 번호를 확인해야 합니다.

validateSendable() :验证是否满足发送间隔 
validateFields() :验证数据合法性

확인을 통과한 후 requestVerifySms()를 사용하여 확인 코드를 보냅니다.

구체적인 코드는 다음과 같습니다.

use SmsManager;
trait SmsCodeUtil {
 public function sendSmsCode()
 {
 $result = SmsManager::validateSendable();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 $result = SmsManager::validateFields();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 $result = SmsManager::requestVerifySms();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 return respondSuccess($result['message']);
 }
}

use SmsManager;
trait SmsCodeUtil {
 public function sendSmsCode()
 {
 $result = SmsManager::validateSendable();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 $result = SmsManager::validateFields();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 $result = SmsManager::requestVerifySms();
 if(!$result['success']) {
  return respondUnprocessable($result['message']);
 }
 return respondSuccess($result['message']);
 }
}

인증 모듈

로그인 시 휴대폰 번호와 인증 코드를 인증해야 할 수도 있습니다. 따라서 SmsCodeUtil.php에 인증코드 확인 기능을 추가해야 합니다. 코드는 공식 Github에 제공되었으며 약간 수정될 수 있습니다.

public function validateSmsCode()
{
 //验证数据
 $validator = Validator::make(inputAll(), [
 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required',
 'sms_code'  => 'required|verify_code',
 ]);

 if ($validator->fails()) {
 //验证失败后建议清空存储的发送状态,防止用户重复试错
 SmsManager::forgetState();
 respondUnprocessable(formatValidationErrors($validator));
 }
}
public function validateSmsCode()
{
 //验证数据
 $validator = Validator::make(inputAll(), [
 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required',
 'sms_code'  => 'required|verify_code',
 ]);
 if ($validator->fails()) {
 //验证失败后建议清空存储的发送状态,防止用户重复试错
 SmsManager::forgetState();
 respondUnprocessable(formatValidationErrors($validator));
 }
}

Functional Test

다음으로 라우팅과 컨트롤러를 설정하고 기능이 정상인지 테스트합니다.

동시에 열 수 있습니다. host-domain/laravel-sms/info 인증 코드 SMS 발송 및 인증 상태를 확인하세요.

데이터베이스 로그가 활성화된 경우 laravel_sms 테이블에서 SMS 발송 결과에 대한 자세한 정보를 확인할 수 있습니다.

먼저 api.php에 추가하세요:

$api->post('/auth/send-sms-code', 'Auth\LoginController@sendSmsCode');
$api->post('/auth/validate-sms-code', 'Auth\LoginController@validateSmsCode');
$api->post('/auth/send-sms-code', 'Auth\LoginController@sendSmsCode');
$api->post('/auth/validate-sms-code', 'Auth\LoginController@validateSmsCode');

그런 다음 LoginController.php에 추가하세요:

use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 ...
}
use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 
 ...
}

그런 다음 Postman 또는 기타 유사한 도구를 사용하여 Api 기능을 테스트하세요.

인증 코드 보내기

POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}
POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}

인증이 완료되어 성공적으로 전송되면 다음과 같이 반환됩니다.

{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}
{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}

동시에 입력한 휴대폰 번호로 인증이 수신됩니다. 암호.

인증에 실패하거나 전송에 실패할 경우 해당 오류 메시지가 반환됩니다.

인증 코드 확인

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

인증에 통과되면 반품이 불가능합니다.

인증에 실패하면 해당 오류 메시지가 반환됩니다.

현지화된 프롬프트 메시지 언어

는 laravel-sms.php의 일부 프롬프트 메시지에 대한 사용자 정의를 제공합니다. 나머지 프롬프트 정보를 현지 언어로 변환하려면 별도로 처리해야 합니다.

먼저 config/app.php의 언어 설정이 올바른지 확인하세요. zh_cn으로 설정되어 있습니다.

'locale' => 'zh_cn',
'locale' => 'zh_cn',

然后在 resources\lang\zh_cn 文件夹下新建 validation.php,并填入本地化信息:

return [
 'required' => '缺少:attribute参数',
 'zh_mobile'         => '非标准的中国大陆手机号',
 'confirm_mobile_not_change' => '提交的手机号已变更',
 'verify_code'        => '验证码不合法或无效',
 'attributes' => [
  'phone_number' => '手机号',
  'sms_code'  => '验证码',
 ],
];
return [
 'required' => '缺少:attribute参数',
 'zh_mobile'         => '非标准的中国大陆手机号',
 'confirm_mobile_not_change' => '提交的手机号已变更',
 'verify_code'        => '验证码不合法或无效',
 'attributes' => [
  'phone_number' => '手机号',
  'sms_code'  => '验证码',
 ],
];

重新 POST 相关地址,可以看到对应的提示信息语言已经本地化。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Laravel中重写资源路由自定义URL的实现方法

Laravel5.2使用Captcha生成验证码实现登录的方法

通过 Laravel “规范” 的开发短信验证码发送功能

위 내용은 laravel sms를 사용하여 인증을 위한 SMS 인증코드 전송 기능을 구축합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.