向登录界面插入验证码php,Laravel-admin 登录添加验证码
时间: 2023-09-23 07:12:08 浏览: 50
要在 Laravel-admin 的登录界面添加验证码,可以参考以下步骤:
1. 安装验证码库
可以使用 Laravel 自带的验证码库,也可以使用其他第三方库,这里以 Laravel 自带的验证码库为例。在 Laravel 中,可以使用 Composer 安装验证码库:
```
composer require mews/captcha
```
2. 生成验证码
在登录页面的表单中添加验证码输入框和验证码图片,然后在后台生成验证码并将其显示在表单中。可以在登录页面的控制器中添加以下代码:
```
use Mews\Captcha\Captcha;
public function getLogin()
{
$captcha = new Captcha();
$captcha->setFontSize(18);
$captcha->setLength(4);
$captcha->setBackgroundColor(255,255,255);
$captcha->setFontColor(0, 0, 0);
$captcha->generate();
$captcha_image = $captcha->inline();
return view('admin.login', compact('captcha_image'));
}
```
这段代码生成了一个验证码,并将其嵌入到 HTML 中,然后将其传递给登录页面的视图。
3. 验证验证码
在用户提交表单时,需要验证用户输入的验证码是否正确。可以在登录页面的控制器中添加以下代码:
```
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Mews\Captcha\Captcha;
public function postLogin(Request $request)
{
$validator = Validator::make($request->all(), [
'username' => 'required',
'password' => 'required',
'captcha' => [
'required',
Rule::exists('captcha')->where(function ($query) use($request) {
$query->where('captcha', $request->captcha)->where('captcha_type', 'admin_login');
})
],
], [
'captcha.exists' => '验证码不正确',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// 验证通过,进行登录操作
// ...
}
```
这段代码使用 Laravel 自带的表单验证功能,验证用户输入的验证码是否正确。如果验证码不正确,会返回错误信息。如果验证码正确,则进行登录操作。
4. 添加验证码表
为了保存验证码信息,需要在数据库中添加一个验证码表。可以使用以下 SQL 语句创建一个验证码表:
```
CREATE TABLE `captcha` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`captcha` varchar(10) NOT NULL,
`captcha_type` varchar(50) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
这个表只包含三个字段:`id`、`captcha` 和 `captcha_type`。`id` 是自增主键,`captcha` 是验证码的内容,`captcha_type` 是验证码的类型,用于区分不同场景下的验证码。
5. 保存验证码信息
在生成验证码时,将验证码信息保存到数据库中。可以在 `getLogin` 方法中添加以下代码:
```
use Mews\Captcha\Captcha;
use App\Models\Captcha as CaptchaModel;
public function getLogin()
{
$captcha = new Captcha();
$captcha->setFontSize(18);
$captcha->setLength(4);
$captcha->setBackgroundColor(255,255,255);
$captcha->setFontColor(0, 0, 0);
$captcha->generate();
$captcha_image = $captcha->inline();
$captcha_db = new CaptchaModel();
$captcha_db->captcha = $captcha->getPhrase();
$captcha_db->captcha_type = 'admin_login';
$captcha_db->save();
return view('admin.login', compact('captcha_image'));
}
```
这段代码使用 `Captcha` 类生成验证码,并将验证码内容和类型保存到数据库中。
6. 清理过期验证码
为了避免数据库中出现大量过期的验证码,可以定期清理过期的验证码。可以在 `Kernel` 类中添加一个定时任务,每天清理过期的验证码:
```
use App\Models\Captcha;
use Carbon\Carbon;
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
$expired_at = Carbon::now()->subMinute(30);
Captcha::where('created_at', '<', $expired_at)->delete();
})->daily();
}
```
这段代码每天执行一次,删除创建时间早于 30 分钟前的验证码记录。
以上就是向 Laravel-admin 登录界面添加验证码的步骤。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)