前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >laravel用户认证

laravel用户认证

作者头像
章鱼喵
发布2019-03-29 15:35:32
1.5K0
发布2019-03-29 15:35:32
举报
文章被收录于专栏:codingcoding

一键生成认证代码

代码语言:javascript
复制
$ php artisan make:auth

查看生成的代码:

image

routes/web.php 中新增了以下两行:

代码语言:javascript
复制
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

Auth::routes() 是 Laravel 的用户认证路由,在 vendor/laravel/framework/src/Illuminate/Routing/Router.php 搜索 LoginController 可看到定义的具体路由:

代码语言:javascript
复制
// 用户身份验证相关的路由
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// 用户注册相关路由
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// 密码重置相关路由
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');

// Email 认证相关路由
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

此外,生成了以下视图:

视图名称

说明

register.blade.php

注册页面视图

login.blade.php

登录页面视图

verify.blade.php

邮箱认证视图

passwords/email.blade.php

提交邮箱发送邮件的视图

passwords/reset.blade.php

重置密码的页面视图

用户注册流程

执行迁移生成用户表:

代码语言:javascript
复制
$ php artisan migrate

访问 http://test.com/register 注册用户,注册成功后会自动登录

在blade判断是否为登录状态:

代码语言:javascript
复制
@guest
    # 未登录用户
@else
    # 已登录用户
@endguest

生成验证码

使用 mewebstudio/captcha 生成验证码

代码语言:javascript
复制
$ composer require mews/captcha
$ php artisan vendor:publish

image

验证码的使用分为两步:

  • 前端展示 —— 生成验证码给用户展示,并收集用户输入的答案
  • 后端验证 —— 接收答案,检测用户输入的验证码是否正确

resources/views/auth/register.blade.php 新增:

代码语言:javascript
复制
<div class="form-group row">
    <label for="captcha" class="col-md-4 col-form-label text-md-right">验证码</label>
    <div class="col-md-6">
        <input id="captcha" class="form-control{{ $errors->has('captcha') ? ' is-invalid' : '' }}" name="captcha" required>
        <img class="thumbnail captcha mt-3 mb-2" src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
        @if ($errors->has('captcha'))
            <span class="invalid-feedback" role="alert">
                <strong>
                    {{ $errors->first('captcha') }}
                </strong>
            </span>
        @endif
    </div>
</div>

后端验证:

mews/captcha 是专门为 Laravel 量身定制的扩展包,能很好的兼容 Laravel 生成的注册逻辑。我们只需要在注册的时候,添加上表单验证规则即可:

app/Http/Controllers/Auth/RegisterController.php

代码语言:javascript
复制
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
        'captcha' => ['required', 'captcha'], # 第二个 captcha 是 mews/captcha 自定义的表单验证规则
    ], [
        'captcha.required' => '验证码不能为空',
        'captcha.captcha' => '请输入正确的验证码',
    ]);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一键生成认证代码
  • 用户注册流程
  • 生成验证码
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档