laravel身份验证-Auth的使用

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方法中:

<?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的相关章节。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值