Confide提供了认证模块,包含了登录、注册、退出、密码重置等功能。
项目地址
> https://github.com/zizaco/confide `暂时未支持Laravel 5`
英文通读水平有限,记下为妙,文档瞎翻如下(意译):
Confide针对Laravel提供了全套的身份验证解决方案,它可以减少涉及用户管理的重复工作。包含创建账户,登陆,登出,E-MAIL验证密码重置等有用的功能。
Confide的目标是简单易用,快速配置和灵活使用。
> 注意:如果你使用的是MongoDB,请使用Confide Mongo
> https://github.com/Zizaco/confide-mongo
## 产品特点:
#### 当前:
1. 账号确认(通过确认链接)。
2. 密码确认(发送一封带有重设密码链接的EMAIL)。
3. 简单方便的创建登陆,注册和密码重设的表单。
4. 为登陆,注册,密码重设,确认等生成路由。
5. 生成一个可定制的控制器,包含了基础的用户账户行为。
6. 包含一组用于帮助解决用户基本特性的方法。
7. 集成了`Laravel Auth`和`Reminders component/configs`.
8. 用户验证。
9. 登陆控制。
10. 验证后跳转至先前的路由。
11. 检查注册中独特的email和username。
如果你需要的是用户角色和权限控制请看`Entrust`
> 警告: 默认会发送一封确认邮件用于验证用户的邮件地址。在confide的config文件可以改变这个设置,将signup_email和 signup_confirm设置为false,就不必发送邮件并验证邮件地址了。
## 快速开始
#### 需要的设置
在composer.json文件的require键中加入如下代码
"zizaco/confide": "~4.3@dev"
#### 运行Composer更新命令
$ composer update
将 `Zizaco\Confide\ServiceProvider` 添加到 `app/config/app.php` 的 `providers` 数组的后面
~~~
'providers' => array(
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
...
'Zizaco\Confide\ServiceProvider',
),
~~~
将 `'Confide' => 'Zizaco\Confide\Facade'` 加入到 `app/config/app.php` 的 `aliases` 数组的末尾
~~~
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
...
'Confide' => 'Zizaco\Confide\Facade',
),
~~~
#### 配置
在`app/config/auth.php`中设置属性值。这个值将被confide用于生成数据库迁移以及生成工资器和路由。
在`config/mail.php`设置右键地址和名称,他们将被用于向用户发送账户验证和密码重设右键。
#### 用户模型
现在生成Confide迁移和密码提醒表的迁移:
~~~
$ php artisan confide:migration
~~~
将生成_confide_setup_users_table.php的迁移。你可以使用 artisan migrate 命令运行它:
~~~
$ php artisan migrate
~~~
将会生成一张包含`email`, `password`, `remember_token`, `confirmation_code` 和`confirmed `列的表,这些都是Confide需要使用的默认字段。你还可以自由的向此表添加更多的字段。
将你在 app/models/User.php 中的用户模型变成:
~~~
<?php
use Zizaco\Confide\ConfideUser;
use Zizaco\Confide\ConfideUserInterface;
class User extends Eloquent implements ConfideUserInterface {
use ConfideUser;
}
?>
~~~
`ConfideUser`特性将会妥善的处理用户模型的的一些行为。
#### 装储默认的访问
最后,你可以为confide装储默认的控制器, 知识库以及默认路由.
~~~
$ php artisan confide:controller
$ php artisan confide:routes
~~~
别忘记运行以下命令对自动加载进行优化
~~~
$ composer dump-autoload
~~~
准备好出发了吗. 使用 `http://yourapp/users/create` 创建你的第一用户,打开 `app/routes.php` 查看可用的路由。你需要确认最新创建的用户(通过”`reaching`”他自身的`confirm`()方法),除此之外你可以再配置中禁用登陆要求验证的配置(看下面)。
## 详细使用说明
#### 基本设置:
1. `config/database.php` 中配置的数据库连接需要正确地运行。
2. `config/auth.php` 中的模型和表的名称要正确,因为会被Confide一直使用(特别是生成迁移和控制器)。
3. `from` 配置在 `config/mail.php` 中。
#### 配置:
1. `‘Zizaco\Confide\ServiceProvider’` 和 `‘Confide’ => ‘Zizaco\Confide\Facade’` 分别加入 `config/app.php` 的 `‘providers’` 和 d 数组里。
2. 用户模型 (在 `config/auth.php` 中相同名称) 需要实现 `Zizaco\Confide\ConfideUserInterface` 接口. 这样可以使 `forgotPassword()` and `confirm()` 这些方法变可用。
#### 可选步骤:
1. 可选地你可以在你的用户模型使用 `Zizaco\Confide\ConfideUser` 特性。这个特性将会为用户启用`”confide’s default”`,这会节约很多时间。如果你期待更多的定制你可以编写自己的代码。
2. 使用`Confide facade`可以轻松的使用 `makeLoginForm()` 和 `makeSignupForm()` 生成`login`和`signup`表单。你可以使用如下代码展现你的表单`{{ Confide::makeLoginForm()->render() }}`.
3. 如果需要从Confide模板生成控制器和知识库,可以使用 `$ php artisan confide:controller` 命令。如果当前已经存在相同名称的控制器,不会覆盖。
4. 使用 `$ php artisan confide:routes` 可以从Confide模板生成匹配控制器的路由。别担心,你的路由不会被覆盖。
## 高级
#### UserRepository类
你可能已经注意到当生成控制器的时候同样会创建一个`UserRepository`类。这个类包含一些不属于”`controoler`”目标的代码,将你的类变的更干净和更有可测试性。如果你还是不明白这个类为什么不存在,我推荐你使用”`Creating flexible Controllers in Laravel 4 using Repositories`”(在Laravel4中使用仓库生成弹性控制器)搜索google。
#### 使用自定义的类,表以及模型名称
你可以修改`config/auth.php`文件中关联用户的的模型名称。Confide目前使用在该配置文件中的值。
在从controller模板生成控制器时可以使用`–name`参数改变控制器名称。
~~~
$ php artisan confide:controller --name=Employee
~~~
结果会是 EmployeeController
接着,当生成路由的时候, 你需要使用 `–controller` 参数来匹配已经存在的controller.
~~~
$ php artisan confide:routes --controller=Employee
~~~
你也可以使用带namespace命名空间的控制器
~~~
$ php artisan confide:controller --name=MyProject\\Auth\\User
~~~
> 警告: 在bash中,你需要使用双反斜杠符号’\\’ 。会得到这样的 MyProject\Auth\UserController 路径。当然生成文件将加入到命名空间等同的文件目录(原谅我不会翻译这句)。
#### 使用自定义表单和邮箱
首先,发布配置文件:
~~~
$ php artisan config:publish zizaco/confide
~~~
然后在`app/config/packages/zizaco/confide/config.php`文件中修改视图名称。
#### 比对
要比对你的用户表你还需要添加password_confirmation和confirmation_code字段。例如
~~~
class UsersTableSeeder extends Seeder {
public function run() {
$user = new User;
$user->email = 'johndoe@site.dev';
$user->password = 'foo_bar_1234';
$user->password_confirmation = 'foo_bar_1234';
$user->confirmation_code = md5(uniqid(mt_rand(), true));
$user->confirmed = 1;
if(! $user->save()) {
Log::info('Unable to create user '.$user->email, (array)$user->errors());
} else {
Log::info('Created user '.$user->email);
}
}
}
~~~
#### 自定义用户验证
你可以通过创建一个类实行你自己的验证器,它需要实现了`UserValidatorInterface`接口和注册为类似”`confide.user_validator`”的类。
例如,创建你自己的验证器类:
~~~
// app/models/MyOwnValidator.php
class MyOwnValidator implements UserValidatorInterface {
public function validate(ConfideUserInterface $user) {
unset($user->password_confirmation);
return true; // If the user valid
}
}
~~~
然后在IoC容器里注册为 “confide.user_validator”
~~~
// app/start/global.php
//...
App::bind('confide.user_validator', 'MyOwnValidator');
~~~
同样的,在保存之前别忘记你的验证器需要复原’password_confirmation’属性。
#### 给”make”方法传递额外的信息
如果你想给已经渲染的表单传递额外的参数,你可以使用另外一种语法来实现这一目标。
#### 替代使用make方法:
~~~
Confide::makeResetPasswordForm($token):
~~~
你可以使用:
~~~
View::make(Config::get('confide::reset_password_form'))
->with('token', $token);
~~~
它产生相同的输出,但是你可以像其它视图一样使用width来添加更多输入。
#### RESTful controller
如果你想生成一个 `RESTful controller` 你可以使用 `–restful` 或 `-r` 参数项。
~~~
$ php artisan confide:controller --restful
~~~
将会得到一个 RESTful controller
接着生成路由的时候,需要使用–resful参数来匹配已经存在的路由。
~~~
$ php artisan confide:routes --restful
~~~
#### 用户角色和权限
为了使Confide的代码量不至于膨胀,角色和权限使用另外一个扩展包:Entrust
`Entrust`和`Confide`是一对好基友。
~~~
See Entrust - https://github.com/Zizaco/entrust
~~~
在登陆后跳转至预设好的路由
在定义你的筛选器的时候你需要使用`Redirect::guest(‘users/login’)`。例如:
~~~
// filters.php
Route::filter('auth', function () {
// If the user is not logged in 如果用户没登陆
if (Auth::guest()) {
return Redirect::guest('users/login');
}
});
// Only authenticated users will be able to access routes that begins with
// 'admin'. Ex: 'admin/posts', 'admin/categories'.
Route::when('admin*', 'auth');
~~~
或者,你在使用Entrust :)
~~~
// filters.php
Entrust::routeNeedsRole('admin*', 'Admin', function () {
return Redirect::guest('users/login');
});
~~~
最终,如果你在控制器的`users/login function`中使用了 `Redirect:intended(‘a/default/url/here’)`,成功登陆后会默认跳转。生成的控制器已经完成了这些。
#### 故障排除
> [2014-07-18 01:13:15] production.ERROR: exception ‘Illuminate\Database\QueryException’ with message ‘SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘password_confirmation’ in ‘field list’ (SQL: insert into users …
在发送到数据库前需要将`password_confirmation`从项目中移除。保证你的用户模型实现了`ConfideUserInterface`接口,如上所述他使用了`ConfideUser `特性。除此之外,如果你使用了自定义的验证器,你需要在保存用户前复原`password_confirmation`。
我需要我的用户有 “username”
当生成confide和controller迁移的时候使用–username参数。
~~~
$ php artisan confide:migration --username
...
$ php artisan confide:controller --username
~~~
如果你想让username变成必填项,你需要扩展UserValidator和重写$rules属性。
当我尝试登陆的时候我收到 “Your account may not be confirmed” (你的账号没有确认)
你需要验证最新创建的用户 (by “reaching” its confirm() method),除此之外你可以再配置文件中取消必须验证的配置。
你可以很轻松的验证用户,通过使用Laravel的artisan修补工具。
我没法生成带有命名空间的控制器
在bash中,你需要使用双反斜杠符号’\\’。
~~~
$ php artisan confide:controller --name=MyProject\\Auth\\User
~~~
用户不用验证账号就能登录
如果你想只有验证的用户才能登录,在你的UserController中,用`logAttempt( $input, true )`代替用`logAttempt( $input )`。第二个参数代表”`confirmed_only`”。
当我运行`composer update`更新的时候,我的应用崩溃了
Confide 4.0.0 是一个巨大的所有代码都被重写的更新。一些类改变,生成器被改进为了匹配某些更好的实务(比如代码库和分开验证器类)。查看下面的Release Notes。
如果你有一个遗产项目使用了较老的Confide版本。别担心,你永远可以在composer.json指定一个早先的版本。
例如: `“zizaco/confide”: “~3.2″`将会避免下载4.0版本。只会下载3.2终极版。
* * * * *
原文地址:[http://www.zhangxihai.cn/archives/160](http://www.zhangxihai.cn/archives/160)
- 前言
- 发行说明/L5新特性
- 升级向导
- 升级到 5.0.16
- 从 4.2 升级到 5.0
- 从 4.1 升级到 4.2
- 从 4.1.x 升级到 4.1.29
- 从 4.1.25 升级到 4.1.26
- 从 4.0 升级到 4.1
- 贡献向导
- 环境配置
- 安装
- 配置
- 基本功能
- 路由
- 基本路由
- CSRF 保护
- 方法欺骗
- 路由参数
- 命名路由
- 路由群组
- 路由模型绑定
- 抛出 404 错误
- 中间件
- 建立中间件
- 注册中间件
- 可终止中间件
- 控制器
- 基础控制器
- 控制器中间件
- 隐式控制器
- RESTful 资源控制器
- 请求
- 取得请求实例
- 取得输入数据
- 旧输入数据
- Cookies
- 上传文件
- 其他的请求信息
- 响应
- 基本响应
- 重定向
- 其他响应
- 响应宏
- 系统架构
- 服务提供者
- 基本提供者例子
- 注册提供者
- 缓载提供者
- 服务容器
- 基本用法
- 将接口绑定到实现
- 上下文绑定
- 标签
- 实际应用
- 容器事件
- 参考:理解PHP 依赖注入|Laravel IoC容器
- Contracts
- 为什么用 Contracts
- Contract 参考
- 如何使用 Contracts
- Facades
- 实际用法
- 建立 Facades
- 模拟 Facades
- Facade 类参考
- 请求的生命周期
- 生命周期概要
- 聚焦于服务提供者
- 应用程序结构
- 根目录
- App 目录
- 为应用程序配置命名空间
- 系统服务
- 认证
- 用户认证
- 取得经过认证的用户
- 保护路由
- HTTP 基本认证
- 忘记密码与重设
- 第三方登陆认证
- 交易
- 配置文件
- 订购方案
- 一次性付款
- Single Charges
- 免信用卡试用
- 订购转换
- 订购数量
- 取消订购
- 恢复订购
- 确认订购状态
- 处理失败订阅
- 处理其它 Stripe Webhooks
- 收据
- 缓存
- 配置
- 缓存用法
- 递增与递减
- 缓存标签
- 缓存事件
- 数据库缓存
- 集合
- Command Bus
- 建立命令
- 调用命令
- 命令队列
- 命令管道
- 核心扩展
- 管理者和工厂
- 缓存
- Session
- 认证
- 基于服务容器的扩展
- Laravel Elixir
- 安装与配置
- 使用方式
- Gulp
- Custom Tasks and Extensions
- 加密
- Envoy 任务执行器
- 安装
- 执行任务
- 多服务器
- 并行执行
- 任务宏
- 通知
- 更新 Envoy
- 错误与日志
- 配置
- 错误处理
- HTTP 异常
- 日志
- 事件
- 基本用法
- 事件处理队列
- 事件订阅者
- 文件系统与云存储
- 配置文件
- 基本用法
- 自定义文件系统
- 哈希
- 基本用法
- 辅助方法
- 数组
- 路径
- 路由
- 字符串
- 网址(URL)
- 其他
- 本地化
- 语言文件
- 基本用法
- 复数
- 验证
- 覆写扩展包的语言文件
- 邮件
- 配置
- 基本用法
- 内嵌附件
- 邮件队列
- 邮件与本地端开发
- 扩展包开发
- 视图
- 语言
- 配置文件
- 公共资源
- 发布分类文件
- 路由
- 分页
- 配置
- 使用
- 追加分页链接
- 转换至 JSON
- 队列
- 设置
- 基本用法
- 队列闭包
- 执行一个队列监听
- 常驻队列处理器
- 推送队列
- 已失败的工作
- 会话
- 配置
- 使用 Session
- 暂存数据(Flash Data)
- 数据库 Sessions
- Session 驱动
- 模板
- Blade 模板
- Blade 控制语法结构
- Blade 扩展
- 参考:@section与@yield 介绍
- 单元测试
- 定义并执行测试
- 测试环境
- 从测试调用路由
- 模拟 Facades
- 框架 Assertions
- 辅助方法
- 重置应用程序
- 表单验证
- 基本用法
- 控制器验证
- 表单请求验证
- 使用错误信息
- 错误信息 & 视图
- 可用验证规则
- 条件验证规则
- 自定义错误信息
- 自定义验证规则
- 数据库
- 使用基础
- 配置
- 读取/写入连接
- 执行查找
- 数据库事务处理
- 获取连接
- 日志记录
- 查询构造器
- Selects
- Joins
- 高级 Wheres
- 聚合
- 原生表达式
- 添加
- 更新
- 删除
- Unions
- 悲观锁定 (Pessimistic Locking)
- Eloquent ORM
- 基本用法
- 批量赋值
- 新增,更新,删除
- 软删除
- 时间戳
- 范围查询
- Global Scopes
- 关联
- 关联查询
- 预载入
- 新增关联模型
- 更新上层时间戳
- 使用枢纽表
- 集合
- 获取器和修改器
- 日期转换器
- 属性类型转换
- 模型事件
- 模型观察者
- 模型 URL 生成
- 转换成数组 / JSON
- 结构生成器
- 建立与删除数据表
- 加入字段
- 修改字段
- 修改字段名称
- 移除字段
- 检查是否存在
- 加入索引
- 外键
- 移除索引
- 移除时间戳记和软删除
- 保存引擎
- 迁移和数据填充
- 建立迁移文件
- 执行迁移
- 回滚迁移
- 数据填充
- Redis
- 配置
- 使用方式
- 管道
- 开发包
- Confide 用户身份认证
- Entrust 权限管理
- Shoppingcart 购物车
- Genertators 代码生成工具
- IDE Helper IDE助手
- Artisan 命令行工具
- 概览
- 用法
- 在命令行接口以外的地方调用命令
- 定时调用 Artisan 命令
- 开发
- 建立自定义命令
- 注册自定义命令