laravel自带了auth类和User模型来帮助我们很方便的实现用户登陆、判断。
首先,先配置一下相关参数
app/config/auth.php
: model
指定模型
这里我只是将table
指定用户表table
从users改成user,因为我个人在数据库命名方面喜欢用单数。app/models/User.php
:protected $table = 'user';
理由同上。
可以看出,很简单甚至不用配置就能使用了,接下来看看如何使用。
以后台为例,每次访问肯定需要先判断用户是否是登陆状态,在其他框架中我们一般习惯在所有控制器的父控制器中判断,也就是在laravel中的app/controllers/BaseController.php
类__construct方法中:
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::check()
的时候就通过了。Redirect::intended('/')
这个方法的意思是跳转到之前的页面,如果像上面那样使用了Redirect::guest()
方法,那么intended这里就会跳转到那时候的url,而它的参数只是一个默认值,再没有记录历史url的时候会跳转到'/'。 还可以继续优化,比如我们不应当在BaseController中进行Auth::check,我们可以利用Route::filter,在请求之前就进行验证,这方面可以参考手册中Route的相关章节。
Auth还有一些其他的方法,比如 Auth::basic()
可以实现http basic认证,详细的可以参考手册 "身份验证" 章节,以及相关api,本文只是描述下大致的验证流程,不会深究了,毕竟阿婆主自己才接触一点点内容。