thinkphp5实现用户手机号利用阿里云验证码登录
2024-12-11 23:19:44
在 ThinkPHP 5 中实现用户手机号利用阿里云验证码登录,可以按照以下步骤进行:
1. 安装阿里云短信服务 SDK
首先,你需要安装阿里云短信服务的 PHP SDK。你可以使用 Composer 来安装:
composer require alibabacloud/sdk
2. 配置阿里云短信服务
在 config.php
文件中添加阿里云短信服务的相关配置:
'alisms' => [
'access_key_id' => 'your_access_key_id',
'access_key_secret' => 'your_access_key_secret',
'sign_name' => 'your_sign_name',
'template_code' => 'your_template_code',
],
3. 创建发送验证码的服务
创建一个服务类来处理发送验证码的逻辑。可以在 application/common/service
目录下创建 SmsService.php
文件:
namespace app\common\service;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class SmsService
{
protected $accessKeyId;
protected $accessKeySecret;
protected $signName;
protected $templateCode;
public function __construct()
{
$this->accessKeyId = config('alisms.access_key_id');
$this->accessKeySecret = config('alisms.access_key_secret');
$this->signName = config('alisms.sign_name');
$this->templateCode = config('alisms.template_code');
AlibabaCloud::accessKeyClient($this->accessKeyId, $this->accessKeySecret)
->regionId('cn-hangzhou')
->asDefaultClient();
}
public function sendSms($phone, $code)
{
try {
$result = AlibabaCloud::rpc()
->product('Dysmsapi')
->scheme('https') // https | http
->version('2017-05-25')
->action('SendSms')
->method('POST')
->host('dysmsapi.aliyuncs.com')
->options([
'query' => [
'PhoneNumbers' => $phone,
'SignName' => $this->signName,
'TemplateCode' => $this->templateCode,
'TemplateParam' => json_encode(['code' => $code]),
],
])
->request();
return $result->toArray();
} catch (ClientException $e) {
return ['success' => false, 'message' => $e->getErrorMessage()];
} catch (ServerException $e) {
return ['success' => false, 'message' => $e->getErrorMessage()];
}
}
}
4. 创建控制器处理登录逻辑
在 application/index/controller
目录下创建 LoginController.php
文件:
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Session;
use app\common\service\SmsService;
class LoginController extends Controller
{
public function sendCode(Request $request)
{
$phone = $request->post('phone');
if (!$phone) {
return json(['status' => 0, 'message' => '手机号不能为空']);
}
// 生成随机验证码
$code = rand(1000, 9999);
// 发送验证码
$smsService = new SmsService();
$result = $smsService->sendSms($phone, $code);
if ($result['success']) {
// 将验证码存储到 session 中
Session::set('verify_code_' . $phone, $code);
return json(['status' => 1, 'message' => '验证码已发送']);
} else {
return json(['status' => 0, 'message' => $result['message']]);
}
}
public function login(Request $request)
{
$phone = $request->post('phone');
$code = $request->post('code');
if (!$phone || !$code) {
return json(['status' => 0, 'message' => '手机号和验证码不能为空']);
}
// 从 session 中获取验证码
$sessionCode = Session::get('verify_code_' . $phone);
if ($sessionCode && $sessionCode == $code) {
// 验证码正确,进行登录逻辑
// 这里可以添加用户登录的具体逻辑,例如查找用户并生成 token
return json(['status' => 1, 'message' => '登录成功']);
} else {
return json(['status' => 0, 'message' => '验证码错误']);
}
}
}
5. 创建前端页面
创建一个简单的 HTML 页面来处理用户输入和提交:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>手机号登录</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body>
<div>
<input type="text" id="phone" placeholder="请输入手机号">
<button id="sendCodeBtn">发送验证码</button>
</div>
<div>
<input type="text" id="code" placeholder="请输入验证码">
<button id="loginBtn">登录</button>
</div>
<div id="message"></div>
<script>
$(document).ready(function() {
$('#sendCodeBtn').click(function() {
var phone = $('#phone').val();
$.post('/index/login/sendCode', {phone: phone}, function(response) {
$('#message').text(response.message);
});
});
$('#loginBtn').click(function() {
var phone = $('#phone').val();
var code = $('#code').val();
$.post('/index/login/login', {phone: phone, code: code}, function(response) {
$('#message').text(response.message);
});
});
});
</script>
</body>
</html>
6. 配置路由
在 route/route.php
文件中添加路由配置:
use think\Route;
Route::post('index/login/sendCode', 'index/LoginController/sendCode');
Route::post('index/login/login', 'index/LoginController/login');
7. 测试
启动你的 ThinkPHP 项目,并访问前端页面进行测试。确保手机号和验证码的发送和验证逻辑正常工作。
通过以上步骤,你就可以在 ThinkPHP 5 中实现用户手机号利用阿里云验证码登录的功能。如果有任何问题,欢迎继续提问。
还没有人发表评论