laravel自带了auth类和User模型来帮助咱们很方便的实现用户登录、判断。php
首先,先配置一下相关参数 app/config/auth.php
:laravel
model
指定模型数据库
table
指定用户表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表单提交处理方法大体以下:this
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,本文只是描述下大体的验证流程,不会深究了,毕竟阿婆主本身才接触一点点内容。