laravel身份验证-Auth的使用
laravel自带了auth类和User模型来帮助我们很方便的实现用户登陆、判断。
先配置一下相关参数
app/config/auth.php:
model 指定模型
table 指定用户表
app/models/user.php:
protected $table = 'users';
这里我们可以看出,是不是很简单?甚至我们都不用配置就能使用了,然后我们来看看如何使用的。
以后台为例,每次访问都必须先判断用户是否是登陆状态,在其他框架中我们一般习惯在所有控制器的父控制器中判断,也就是在laravel中的app/controllers/BaseController.php类__construct方法中:
<?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认证。
- laravel身份验证-Auth的使用
- laravel身份验证-Auth的使用
- Laravel 使用Auth登录验证
- 使用Auth0对Firebase和Angular进行身份验证:第1部分
- Laravel5.3使用auth登录验证
- 在Laravel中使用Middleware进行身份验证
- 使用Auth0对Firebase和Angular进行身份验证:第2部分
- Laravel的Auth验证Token验证使用自定义Redis的例子
- Chapter 1 Securing Your Server and Network(9):使用Kerberos用于身份验证
- 利用用PEAR的Auth_HTTP类和mysql验证web登录身份
- 使用客户端身份验证方案“Anonymous”禁止 HTTP 请求"错误
- 登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。
- 配置nginx身份验证(ngx_http_auth_basic_module)
- 仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)
- php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- "使用 Windows 身份验证"连接 SQL Server 失败
- 如何:使用 SOAP 头执行自定义身份验证
- ASP.NET自定义身份验证的实践(Page.User.Identity.Name的使用)
- 使用telnet登陆smtp服务发邮件(带身份验证)