Laravel 5.5 注册登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lamp_yang_3533/article/details/80962197

快速入门

Laravel 提供了几个预置的认证控制器,位于 App\Http\Controllers\Auth 命名空间下。

RegisterController 用于处理新用户注册, LoginController 用于处理用户登录认证, ForgotPasswordController 用于处理重置密码邮件链接, ResetPasswordController 包含重置密码逻辑,每个控制器都使用 trait 来引入它们需要的方法。对很多应用而言,你根本不需要修改这些控制器。

迁移数据表

执行如下命令:

php artisan migrate

它会根据 database/migrations 中的文件,迁移生成登录注册相关的数据表(默认包含 users、password_resets)。

创建路由和视图

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

php artisan make:auth

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

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

Auth::routes();

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

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

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

注册一个新用户

在浏览器中访问 http://www.adm.devp/register ,即可进入注册页面。

注册成功后页面跳转到认证后的页面 http://www.adm.devp/home 

退出当前的用户后,访问登录页面 http://www.adm.devp/login ,测试登录。

自定义跳转路径

当一个用户成功进行登录认证后,默认将会跳转到 /home。

你可以通过在 LoginController 中,定义 redirectTo 属性来自定义登录认证成功之后的跳转路径:

protected $redirectTo = '/home';

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

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

注:redirectTo() 方法的优先级大于redirectTo 属性。

自定义验证/存储

要想修改新用户注册所必需的表单字段,或者自定义新用户字段如何存储到数据库,你可以修改 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
{
    //
    public function update(Request $request)
    {
        $user = $request->user();  // 返回认证用户实例
        dump($user);
    }
}

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

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

use Illuminate\Support\Facades\Auth;

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

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

路由保护

路由中间件可用于只允许通过认证的用户访问给定路由。

Laravel 通过定义在 Illuminate\Auth\Middleware\Authenticate 中的 auth 中间件来实现这一功能。由于该中间件已经在 HTTP kernel 中注册,你所要做的仅仅是将该中间件加到相应的路由定义中:

Route::get('profile', function() {
    // 只有认证用户可以进入...
})->middleware('auth');

你也可以在控制器的构造方法中调用 middleware 方法来实现同样的功能。

例如,HomeController 就是这么做的:

public function __construct()
{
    $this->middleware('auth');
}

因此,在没有登录的情况下,访问 http://www.adm.devp/home 会跳转到登录页面。

指定一个Guard

添加 auth 中间件到路由后,还可以指定使用哪个 guard 来实现认证, 指定的 guard 对应配置文件 config/auth.php 中 guards 数组的某个键。

如果没有指定的话,默认 guard 是 web,这也是 config/auth.php 配置文件中默认配置的。

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

猜你喜欢

转载自blog.csdn.net/lamp_yang_3533/article/details/80962197