laravel框架学习---利用Laravel的Auth模块实现用户的注册和登录

        Laravel 中实现用户登录认证非常简单,因为Laravel基本上为你提供登录认证所需的一切组件,你只要拿过来用就可以了。在Laravel 5.1以前,新安装的Laravel内置了登录&注册功能,5.1中去除了该功能,但这仅仅是路由和视图,后台的一应代码还是保留了,所以我们要做的仅仅是自定义路由和视图即可。

        那么,再开始之前,我们依然是先注册添加几个路由:

// 认证路由...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');

// 注册路由...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::get('auth/register', 'Auth\AuthController@postRegister');

Route::get('auth/logout', 'Auth\AuthController@getLogout');

        可以看到,展示了5个路由;依次是:

        ①、展示我们的登录表单;

        ②、负责去验证我们的登录;

        ③、展示我们的注册表单;

        ④、自然而然的就是去验证我们的注册信息;

        ⑤、最后一条,完善了我们的流程,负责登录和退出。


        但是在最新版的 laravel框架中,登录认证又做了一些调整

        只需要在新安装的 Laravel 应用下运行 php artisan make:auth php artisan migrate,这两个命令会生成用户登录注册所需要的所有东西,然后在浏览器中访问 http://your-app.dev/register 即可。具体操作如下:

        

        首先,我们可以查看,app/Http/Controllers/Auth 文件夹下,Laravel 提供了几个预置的认证控制器,位于 App\Http\Controllers\Auth 命名空间下,分别是:

.
|-ForgotPasswordController.php           //用于处理重置密码邮件链接
|-LoginController.php                    //用于处理用户登录认证
|-RegisterController.php                 //用于处理新用户注册
|-ResetPasswordController.php            //包含重置密码逻辑

        每个控制器都使用 trait 来引入它们需要的方法。对很多应用而言,你根本不需要修改这些控制器:

        冷暖自知一抹茶ck

      

         路由:

        Laravel 通过运行如下命令可快速生成认证所需要的路由和视图:

D:\software\wamp64\www\laravel5>php artisan make:auth

        新安装的应用运行该命令会生成布局、注册和登录视图,以及所有的认证路由,同时生成 HomeController 用于处理应用的登录请求。

        打开 routes/web.php 路由文件会发现新增了两行:

Auth::routes();

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

        登录注册相关路由都定义在上面 Auth::routes() 方法内。


        视图:

        正如上面所提到的,php artisan make:auth 命令会在 resources/views/auth 目录下创建所有认证需要的视图。make:auth 命令还创建了 resources/views/layouts 目录,该目录下包含了应用的基础布局文件。所有这些视图都使用了 Bootstrap CSS 框架,你也可以根据需要对其进行自定义。


        认证:

        现在你已经为自带的认证控制器设置好了路由和视图,接下来我们来实现新用户注册和登录认证。你可以在浏览器中访问定义好的路由,认证控制器默认已经包含了注册及登录逻辑(通过trait)。

        我们先来注册一个新用户,在浏览器中访问 http://127.0.0.1:8000/register,即可进入注册页面:

        冷暖自知一抹茶ck


        填写表单点击「Register」按钮即可完成注册。注册成功后页面跳转到认证后的页面 http://127.0.0.1:8000/home

        冷暖自知一抹茶ck


        要测试登录功能,可以先退出当前用户,然后访问登录页面 http://127.0.0.1:8000/login

        冷暖自知一抹茶ck


        使用我们之前注册的信息登录成功后,同样会跳转到 http://127.0.0.1:8000/home


        自定义路径:

        我们已经知道,当一个用户成功进行登录认证后,默认将会跳转到 /home,你可以通过在 LoginControllerRegisterController 和 ResetPasswordController 中定义 redirectTo 属性来自定义登录认证成功之后的跳转路径:

protected $redirectTo = '/';

        如果重定向路径需要自定义生成逻辑可以定义一个 redirectTo 方法来取代 redirectTo 属性:

protected function redirectTo()
{
    return '/path';
}

        注:redirectTo 方法优先级大于redirectTo 属性

        

        自定义用户名:

        默认情况下,Laravel 使用 email 字段进行认证,如果你想要自定义认证字段,可以在 LoginController 中定义 username 方法:

public function username()
{
    return 'username';
}

        

        自定义Guard:

        你还可以自定义用于实现用户注册登录的“guard”,要实现这一功能,需要在 LoginControllerRegisterController ResetPasswordController 中定义 guard 方法,该方法将会返回一个 guard 实例:

use Illuminate\Support\Facades\Auth;

protected function guard()
{
    return Auth::guard('guard-name');
}

        需要注意的是,“guard”名称需要在配置文件 config/auth.php 中配置过:

        冷暖自知一抹茶ck


        自定义验证/存储:

        要修改新用户注册所必需的表单字段,或者自定义新用户字段如何存储到数据库,你可以修改 RegisterController 类。该类负责为应用验证输入参数和创建新用户。

        RegisterController validator 方法包含了新用户注册的验证规则,你可以按需要自定义该方法。

        RegisterController create 方法负责使用 Eloquent ORM 在数据库中创建新的 App\User 记录。当然,你也可以基于自己的需要自定义该方法。


        获取登录用户:

        你可以通过 Auth 门面访问认证用户:

use Illuminate\Support\Facades\Auth;

// 获取当前认证用户...
$user = Auth::user();

// 获取当前认证用户的ID...
$id = Auth::id();

        此外,用户通过认证后,你还可以通过 Illuminate\Http\Request 实例访问认证用户(类型提示类会通过依赖注入自动注入到控制器方法中):

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProfileController extends Controller{
    /**
     * 更新用户属性.
     *
     * @param  Request  $request
     * @return Response
     */
    public function update(Request $request)
    {
        // $request->user() 返回认证用户实例...
    }
}

        上面两种方式返回的结果完全一致:

        冷暖自知一抹茶ck


        判断当前用户是否通过认证:

        要判断某个用户是否登录到应用,可以使用 Auth 门面的 check 方法,如果用户通过认证则返回 true:

use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    // The user is logged in...
}

        注:尽管我们可以使用 check 方法判断用户是否通过认证,但是我们通常的做法是在用户访问特定路由/控制器之前使用中间件来验证用户是否通过认证,想要了解更多,可以查看下面的路由保护。


        退出:

        要退出应用,可以使用 Auth 门面的 logout 方法,这将会清除用户 Session 中的认证信息:

Auth::logout();


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论