安全
配置
Laravel 旨在让验证实现简单。事实上,大部分都已经配置好了。验证配置文件位于 app/config/auth.php
,该文件包含了一些文档说明非常齐全的配置选项,通过它们可以调整用户验证的具体形式。
一般情况下,Laravel在app/models
目录下包含有一个User
模型,通常被作为默认的Eloquent验证驱动所使用。请注意在构建该数据库结构模型时确保密码字段至少能容纳60个字符。
如果你的应用中不使用 Eloquent,你可以使用 Laravel 查询构造器来使用 数据库
验证驱动。
保存密码
Laravel Hash
类提供了可靠的Bcrypt散列算法:
使用Bcrypt散列密码
$password = Hash::make('secret');
验证散列密码
if (Hash::check('secret', $hashedPassword))
{
// 密码匹配...
}
检查密码是否需要重新散列
if (Hash::needsRehash($hashed))
{
$hashed = Hash::make('secret');
}
用户验证
要在应用程序中登陆用户,使用 Auth::attempt
方法。
if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
return Redirect::intended('dashboard');
}
注意 email
不是必需选项,这里仅作为示例。你应该使用任意数据库字段名来作为"用户名"。 Redirect::intended
方法会将用户请求重定向至被用户验证过滤器拦截之前用户试图访问URL中去。可以给该方法提供个回退URI,用于在访问目的无效时,重定向到该URI。
在调用 attempt
方法时,auth.attempt
事件 将会触发。如果验证成功以及用户登陆了,auth.login
事件也会被触发。
要在应用程序中判断用户是否已经登陆,可以使用 check
方法:
判断用户是否已经验证
if (Auth::check())
{
// 用户已经登陆...
}
如果你想在应用中提供“记住我”功能,你可以传递true作为第二个参数传递给attempt方法,应用程序将会无期限地保持用户验证状态(除非手动退出):
验证用户并且“记住”她们
if (Auth::attempt(array('email' => $email, 'password' => $password), true))
{
// 用户状态永久保存...
}
注意: 如果 attempt
方法返回 true
, 用户就已经成功登陆应用程序了。
确定用户是否是通过“Remember”得到的授权
如果你在应用中“记住”了用户的登录状态,你可以使用 viaRemember
方法来确定用户是否正在使用“remember me”这个 cookie 来获得授权:
if (Auth::viaRemember())
{
//
}
你也可以在用户验证查询中加入其它条件:
指定其它条件验证用户
if (Auth::attempt(array('email' => $email, 'password' => $password, 'active' => 1)))
{
// 用户激动状态,没有暂停,并且存在。
}
为了增强安全性,防止会话固定,用户的 SESSION ID 会在每次验证后重新生成。
一旦用户验证通过了,就可以查看 User 模型/记录:
查看登陆用户
$email = Auth::user()->email;
要简单使用用户ID来登陆应用程序,可以使用 loginUsingId
方法:
Auth::loginUsingId(1);
validate
方法可以在不登录应用程序的情况下来验证用户的信息:
验证用户但不登陆
if (Auth::validate($credentials))
{
//
}
也可以使用 once
方法将一个用户登录到系统中做一个单次请求。这样的方式不会使用Session或Cookie来进行状态保持。
登陆用户做单次请求
if (Auth::once($credentials))
{
//
}
应用程序中注销用户登陆状态
Auth::logout();