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

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

Jun 13, 2018 pm 02:22 PM
laravel sms

이 글에서는 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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel과 CodeIgniter의 최신 버전 비교 Laravel과 CodeIgniter의 최신 버전 비교 Jun 05, 2024 pm 05:29 PM

Laravel 9 및 CodeIgniter 4의 최신 버전은 업데이트된 기능과 개선 사항을 제공합니다. Laravel9은 MVC 아키텍처를 채택하여 데이터베이스 마이그레이션, 인증, 템플릿 엔진 등의 기능을 제공합니다. CodeIgniter4는 HMVC 아키텍처를 사용하여 라우팅, ORM 및 캐싱을 제공합니다. 성능면에서는 Laravel9의 서비스 제공자 기반 디자인 패턴과 CodeIgniter4의 경량 프레임워크가 뛰어난 성능을 제공합니다. 실제 애플리케이션에서 Laravel9은 유연성과 강력한 기능이 필요한 복잡한 프로젝트에 적합한 반면, CodeIgniter4는 빠른 개발 및 소규모 애플리케이션에 적합합니다.

Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Jun 01, 2024 pm 01:34 PM

Laravel과 CodeIgniter의 데이터 처리 기능을 비교해 보세요. ORM: Laravel은 클래스-객체 관계형 매핑을 제공하는 EloquentORM을 사용하는 반면, CodeIgniter는 데이터베이스 모델을 PHP 클래스의 하위 클래스로 표현하기 위해 ActiveRecord를 사용합니다. 쿼리 빌더: Laravel에는 유연한 체인 쿼리 API가 있는 반면, CodeIgniter의 쿼리 빌더는 더 간단하고 배열 기반입니다. 데이터 검증: Laravel은 사용자 정의 검증 규칙을 지원하는 Validator 클래스를 제공하는 반면, CodeIgniter는 내장된 검증 기능이 적고 사용자 정의 규칙을 수동으로 코딩해야 합니다. 실제 사례: 사용자 등록 예시에서는 Lar를 보여줍니다.

Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Jun 05, 2024 pm 07:50 PM

초보자의 경우 CodeIgniter는 학습 곡선이 더 완만하고 기능이 적지만 기본적인 요구 사항을 충족합니다. Laravel은 더 넓은 기능 세트를 제공하지만 학습 곡선이 약간 더 가파릅니다. 성능면에서는 Laravel과 CodeIgniter 모두 좋은 성능을 보입니다. Laravel은 보다 광범위한 문서와 적극적인 커뮤니티 지원을 제공하는 반면 CodeIgniter는 더 간단하고 가벼우며 강력한 보안 기능을 갖추고 있습니다. 블로그 애플리케이션을 구축하는 실제 사례에서 Laravel의 EloquentORM은 데이터 조작을 단순화하는 반면 CodeIgniter는 더 많은 수동 구성이 필요합니다.

Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 am 09:09 AM

대규모 프로젝트를 위한 프레임워크를 선택할 때 Laravel과 CodeIgniter는 각각 고유한 장점을 가지고 있습니다. Laravel은 엔터프라이즈급 애플리케이션을 위해 설계되었으며 모듈식 디자인, 종속성 주입 및 강력한 기능 세트를 제공합니다. CodeIgniter는 속도와 사용 편의성을 강조하여 중소 규모 프로젝트에 더 적합한 경량 프레임워크입니다. 요구 사항이 복잡하고 사용자 수가 많은 대규모 프로젝트의 경우 Laravel의 성능과 확장성이 더 적합합니다. 간단한 프로젝트나 리소스가 제한된 상황에서는 CodeIgniter의 가볍고 빠른 개발 기능이 더 이상적입니다.

Laravel - 장인 명령 Laravel - 장인 명령 Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 pm 05:29 PM

소규모 프로젝트의 경우 Laravel은 강력한 기능과 보안이 필요한 대규모 프로젝트에 적합합니다. CodeIgniter는 가볍고 사용하기 쉬운 매우 작은 프로젝트에 적합합니다.

Laravel 또는 CodeIgniter 중 더 나은 템플릿 엔진은 무엇입니까? Laravel 또는 CodeIgniter 중 더 나은 템플릿 엔진은 무엇입니까? Jun 03, 2024 am 11:30 AM

Laravel의 Blade와 CodeIgniter의 Twig 템플릿 엔진을 비교해 보면 프로젝트 요구 사항과 개인 선호도에 따라 선택하십시오. Blade는 MVC 구문을 기반으로 하므로 좋은 코드 구성과 템플릿 상속을 장려합니다. Twig는 유연한 구문, 강력한 필터, 확장된 지원 및 보안 샌드박스를 제공하는 타사 라이브러리입니다.

Laravel - 페이지 매김 사용자 정의 Laravel - 페이지 매김 사용자 정의 Aug 27, 2024 am 10:51 AM

Laravel - 페이지 매김 사용자 정의 - Laravel에는 사용자나 개발자가 페이지 매김 기능을 포함하는 데 도움이 되는 페이지 매김 기능이 포함되어 있습니다. Laravel 페이지네이터는 쿼리 빌더 및 Eloquent ORM과 통합되어 있습니다. 자동 페이지 매김 방법

See all articles