全文翻译:laravel 5.1 官方文档 Authentication (to be continued)

登录认证(Authentication)

Laravel让用户认证变的非常简单.事实上,几乎一切都是开箱即用的.认证的相关的几个配置都在config/auth.php,这些配置都已经附带了良好的注释,描述每一个选项的所对应的认证服务

数据库注意事项

Laravel默认会在app文件夹里包含Eloquent驱动的App\User模型,这个模型可以使用默认的Eloquent驱动用户认证模块.
如果你的应用没有使用Eloquent,你也可以使用依赖laravel查询构造器的database认证驱动.
当我们为Auth\User模型设计数据库结构时,密码字段长度应至少为60个字符。
并且,你还应该确认你的users(或其他类似作用的)数据表包含一个名为remember_token,可以为空,长度为100的string类型的字段.这个字段将会被用来储存「记住我」的 session token.
这个可以通过在迁移文件中使用 $table->rememberToken();方法来实现. Laravel 5 自带的 migrations 里已经设定了这些字段。

# 认证模块快速入门(Authentication Quickstart)

在Laravel 的App\Http\Controllers\Auth命名空间下自带两个开箱即用的认证控制器,AuthController用于处理新用户注册和认证(‘登录’),而PasswordController的功能是帮助现有用户重置他们的密码.
每个控制器使用 trait(特征) 引入需要的方法.对大多数应用而言,你基本不需要修改这些控制器.

路由(Routing)

一开始,并没有任何路由可以将请求引导到认证控制器,你需要手动的将路由添加到app/Http/routes.php文件:

// Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

视图(Views)

虽然认证控制器是Laravel框架附带的,你还是需要添加视图,控制器才能去发挥作用.
视图文件应该放在resources/views/auth目录下,你可以随心所欲的定制这些视图.
登录视图应位于resources/views/auth/login.blade.php,注册视图应位于resources/views/auth/register.blade.php.

一个简单的认证登录视图:

<!-- resources/views/auth/login.blade.php -->

<form method="POST" action="/auth/login">
{!! csrf_field() !!}

<div>
Email
<input type="email" name="email" value="{{ old('email') }}">
</div>

<div>
Password
<input type="password" name="password" id="password">
</div>

<div>
<input type="checkbox" name="remember"> Remember Me
</div>

<div>
<button type="submit">Login</button>
</div>
</form>

一个简单的注册视图:

<!-- resources/views/auth/register.blade.php -->

<form method="POST" action="/auth/register">
{!! csrf_field() !!}

<div>
Name
<input type="text" name="name" value="{{ old('name') }}">
</div>

<div>
Email
<input type="email" name="email" value="{{ old('email') }}">
</div>

<div>
Password
<input type="password" name="password">
</div>

<div>
Confirm Password
<input type="password" name="password_confirmation">
</div>

<div>
<button type="submit">Register</button>
</div>
</form>

认证(Authenticating)

现在,为认证控制器准备的路由和视图都已经建立,你的应用已经做好了注册和认证登录的准备,你可以在浏览器简单的浏览下已路由的地址.
认证控制器已经准备妥当,包含了逻辑(通过他们的特性)可以认证数据库中已存在的用户或新建用户到数据库了.

当一个用户认证成功,会被重定向到/home,你需要注册一个路由来处理这个重定向,通过定义AuthController类的redirectPath属性,你可以定制认证后的重定向位置:

protected $redirectPath = '/dashboard';

当一个用户认证失败,会被重定向到/auth/login,你可以通过定义AuthController类的loginPath属性,来自定义认证失败后的重定向位置:

protected $loginPath = '/login';

自定义(Customizations)

当新用户注册的使用你的应用程序时,要对表单字段做必要修改,或者自定义新用户记录如何插入到数据库中,你可以修改AuthController类,这个类就是为你的应用负责验证和新建用户的。

AuthController类的validator方法包含了新添用户的验证规则,你想怎么改都可以,只要你愿意。

AuthController类的create方法使用[Eloquent ORM](http://laravel-china.org/docs/5.1/eloquent)创建新的App\User记录到数据库,根据数据库需要,你可以自由的修改这个方法。

获取通过身份认证的用户(Retrieving The Authenticated User)

你可以通过Auth门面(facade)访问通过用户认证的用户:

$user = Auth::user();

当一个用户通过认证,你可以通过Illuminate\Http\Request访问这个的用户,例子:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class ProfileController extends Controller
{
/**
* Update the user's profile.
*
* @param Request $request
* @return Response
*/
public function updateProfile(Request $request)
{
if ($request->user()) {
// $request->user() returns an instance of the authenticated user...
}
}
}

确定当前用户是否是经过认证的

如果一个用户已经登录到你的应用,你可以通过Auth门面(facade)的check方法判断,如果返回true说明该用户是被认证过的。

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

然而,你还需要用中间件确认,对用户的认证是在用户被允许访问某些路由或控制器之前。想了解更多相关内容,请访问下面的:保护路由

保护路由(Protecting Routes)

0%