美文网首页程序员
laravel用户认证

laravel用户认证

作者: 闲睡猫 | 来源:发表于2019-03-24 17:37 被阅读0次

    一键生成认证代码

    $ php artisan make:auth
    

    查看生成的代码:

    image

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

    Auth::routes();
    Route::get('/home', 'HomeController@index')->name('home');
    

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

    // 用户身份验证相关的路由  
    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 重置密码的页面视图

    用户注册流程

    执行迁移生成用户表:

    $ php artisan migrate
    

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

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

    @guest
        # 未登录用户
    @else
        # 已登录用户
    @endguest
    

    生成验证码

    使用 mewebstudio/captcha 生成验证码

    $ composer require mews/captcha
    $ php artisan vendor:publish
    
    image

    验证码的使用分为两步:

    • 前端展示 —— 生成验证码给用户展示,并收集用户输入的答案

    • 后端验证 —— 接收答案,检测用户输入的验证码是否正确

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

    <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

    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' => '请输入正确的验证码',
        ]);
    }
    

    相关文章

      网友评论

        本文标题:laravel用户认证

        本文链接:https://www.haomeiwen.com/subject/pknuvqtx.html