laravel自带了auth类和User模型来帮助咱们很方便的实现用户登录、判断。
php
先配置一下相关参数 laravel
app/config/auth.php:算法
model 指定模型数据库
table 指定用户表api
app/models/user.php:数组
protected $table = 'users';服务器
这里咱们能够看出,是否是很简单?甚至咱们都不用配置就能使用了,而后咱们来看看如何使用的。session
之后台为例,每次访问都必须先判断用户是不是登录状态,在其余框架中咱们通常习惯在全部控制器的父控制器中判断,也就是在laravel中的app/controllers/BaseController.php类__construct方法中:app
<?phpclass BaseController extends Controller {public function __construct(){if(Auth::check() == false){return Redirect::guest('login');}} 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 Login(){if (Auth::attempt(array('email' => $email, 'password' => $password))){return Redirect::intended('/');}}
attempt 方法会接收一个数组来做为第一个参数,该参数提供的值将用于寻找数据库中的用户数据,因此上面所述,用户信息将使用 email邮箱字段的值在数据库中进行查找,若是用户被找到,再将password 的值进行加密并与数据库中已加密过的密码进行匹配,若是匹配后两个值是彻底一致,那么咱们会建立一个经过认证的会话给用户。
会话信息获取到以后,则用户登陆成功。当用户身份认证成功 attempt 方法会返回 true,反之则返回 false。
Auth::attempt()方法能够用来验证用户提交的登录信息是否和users表里的匹配,在例子中,password这个字段是固定的,你在users表中也应当有对应的字段,而且宽度至少60,切记不是MD5。
而email字段就随便了,可能你是使用usersname做为惟一标识符的,这个的话就要看你的项目状况了,咱们这里就以 email 做为登录帐户名了,数据库中也有相应的字段。
可能部份内容会比较难以理解,其实只要换个角度思考就能够了,Auth只是帮咱们实现了原本须要本身写的验证逻辑,好比咱们一开始配置的参数中有model和table,Auth就是根据这个自动帮咱们查询,若是匹配成功会自动帮咱们写入session会话,这样下次Auth::check()的时候就经过了。
固然这里若是说规模比较大,有作服务器的分布式部署的话,那么也会涉及到session入库和iphash算法的。
Redirect::intended(‘/’)这个方法的意思是跳转到以前的页面,若是像上面那样使用了Redirect::guest()方法,那么intended这里就会跳转到那时候的url,而它的参数只是一个默认值,再没有记录历史url的时候会跳转到’/’。
还能够继续优化,好比咱们不该当在BaseController中进行Auth::check,咱们能够利用Route::filter,在请求以前就进行验证,同时Auth也能够去作一些权限管理,它里面提供了一些用户组。
Auth还有一些其余的方法,好比 Auth::basic() 能够实现http basic认证。