[TOC]
### **1、简介**
[Laravel](http://laravelacademy.org/tags/laravel "View all posts in Laravel") 的 `[Hash](http://laravelacademy.org/tags/hash "View all posts in Hash")` [门面](http://laravelacademy.org/post/2920.html)为存储用户[密码](http://laravelacademy.org/tags/%e5%af%86%e7%a0%81 "View all posts in 密码")提供了安全的 [Bcrypt](http://laravelacademy.org/tags/bcrypt "View all posts in Bcrypt") 哈希算法。如果你正在使用 Laravel 应用自带的`AuthController` 控制器,将会自动为注册和认证使用该 Bcrypt。
Bcrypt 是散列密码的绝佳选择,因为其“工作因子”是可调整的,这意味着随着硬件功能的提升,生成哈希所花费的时间也会增加。
### **2、基本使用**
可以调用 `Hash` 门面上的 `make` 方法散列存储密码:
~~~
<?php
namespace App\Http\Controllers;
use Hash;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller{
/**
* 更新用户密码
*
* @param Request $request
* @param int $id
* @return Response
*/
public function updatePassword(Request $request, $id)
{
$user = User::findOrFail($id);
// 验证新密码长度...
$user->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
~~~
此外,还可以使用全局的辅助函数 `bcrypt`:
~~~
bcrypt('plain-text');
~~~
##### **验证哈希密码**
`check` 方法允许你验证给定原生字符串和给定哈希是否相等,然而,如果你在使用 Laravel 自带的 `AuthController`(详见[用户认证](http://laravelacademy.org/post/3074.html)一节),就不需要再直接使用该方法,因为自带的认证控制器自动调用了该方法:
~~~
if (Hash::check('plain-text', $hashedPassword)) {
// 密码匹配...
}
~~~
##### **检查密码是否需要被重新哈希**
`needsRehash` 方法允许你判断哈希计算器使用的工作因子在上次密码被哈希后是否发生改变:
~~~
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}
~~~
- 序言
- 发行版本说明
- 升级指南
- 贡献代码
- 开始
- 安装
- 配置
- Laravel Homestead
- 基础
- HTTP 路由
- HTTP 中间件
- HTTP 控制器
- HTTP 请求
- HTTP 响应
- 视图
- Blade 模板引擎
- 架构
- 一次请求的生命周期
- 应用目录结构
- 服务提供者
- 服务容器
- 门面(Facades)
- 数据库
- 起步
- 查询构建器
- 迁移
- 填充数据
- Eloquent ORM
- 起步
- 关联关系
- 集合
- 访问器&修改器
- 序列化
- 服务
- 用户认证
- 用户授权
- Artisan Console
- 订阅支付实现:Laravel Cashier
- 缓存
- 集合
- 集成前端资源:Laravel Elixir
- 加密
- 错误&日志
- 事件
- 文件系统/云存储
- 哈希
- 辅助函数
- 本地化
- 邮件
- 包开发
- 分页
- Redis
- 队列
- Session
- Envoy Task Runner
- 任务调度
- 测试
- 验证
- 新手入门指南
- 简单任务管理系统
- 带用户功能的任务管理系统