laravel身份验证-Auth的使用

http://www.zroran.com/it/php/laravel/7.html php

laravel自带了auth类和User模型来帮助咱们很方便的实现用户登录、判断。html

首先,先配置一下相关参数
app/config/auth.phplaravel

  • model 指定模型数据库

  • table 指定用户表
    这里我只是将tableusers改为user,由于我我的在数据库命名方面喜欢用单数。
    app/models/User.php:api

    protected $table = 'user';session

理由同上。app

能够看出,很简单甚至不用配置就能使用了,接下来看看如何使用。框架

之后台为例,每次访问确定须要先判断用户是不是登录状态,在其余框架中咱们通常习惯在全部控制器的父控制器中判断,也就是在laravel中的app/controllers/BaseController.php类__construct方法中:post

<?php

class BaseController extends Controller {

    public function __construct()
    {
        if(Auth::check() == false){
            return Redirect::guest('login');
        }
    }
    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }

}

代码很容易理解,咱们经过 Auth::check() 就能够判断用户是否登录状态,若是不是的话,直接重定向到 /login 这个url,为何用Redirect::guest()而不用Redirect::to()呢,经过api手册能够查到:
Redirect::guest() 在重定向时会将当前url保存到session中,这样能够在登录之后,使用Redirect::intended()方法跳转到以前的页面继续业务。
跳转到/login这个页面,固然得实现写好路由,能够指向某个控制器方法,详细的就不提了,假设login表单提交处理方法大体以下:优化

public function postLogin()
{
    if (Auth::attempt(array('email' => $email, 'password' => $password)))
    {
        return Redirect::intended('/');
    }
}

Auth::attempt()方法能够用来验证用户提交的登录信息是否和user表里的匹配,在例子中,password这个字段是固定的,你在user表中也应当有对应的字段,而且宽度至少60,切记不是MD5。而email字段就随便了,可能你是使用username做为惟一标识符的,这个因项目而异吧,这里就随便以 email 做为登录帐户名了,数据库中也有相应的字段。
可能有人会比较难以理解,其实只要换个角度,Auth只是帮咱们实现了原本须要本身写的验证逻辑,还记得一开始配置的参数中有model和table,Auth就是根据这个自动帮咱们查询,若是匹配成功会自动帮咱们写入session,这样下次Auth::check()的时候就经过了。
Redirect::intended('/')这个方法的意思是跳转到以前的页面,若是像上面那样使用了Redirect::guest()方法,那么intended这里就会跳转到那时候的url,而它的参数只是一个默认值,再没有记录历史url的时候会跳转到'/'。

还能够继续优化,好比咱们不该当在BaseController中进行Auth::check,咱们能够利用Route::filter,在请求以前就进行验证,这方面能够参考手册中Route的相关章节。

Auth还有一些其余的方法,好比 Auth::basic() 能够实现http basic认证,详细的能够参考手册 "身份验证" 章节,以及相关api,本文只是描述下大体的验证流程,不会深究了,毕竟阿婆主本身才接触一点点内容。