zizaco/confide

Confide 是 Laravel 4 的认证解决方案

安装次数: 417 516

依赖: 7

建议者: 4

安全: 0

星标: 1 193

关注者: 74

分支: 259

开放问题: 43


README

Confide Poster

Build Status Coverage Status Scrutinizer Code Quality ProjectStatus Latest Stable Version Total Downloads License

SensioLabsInsight

Confide 是一个用于简化用户管理工作的 Laravel 认证解决方案。它采用了一种避免重复代码(DRY)的方法,包括账户创建、登录、登出、电子邮件确认、密码重置等功能。

Confide 旨在使用简单、配置快速且灵活。

注意:如果您正在使用 MongoDB,请检查 Confide Mongo

功能

当前

  • 账户确认(通过确认链接)。
  • 密码重置(发送带有更改密码链接的电子邮件)。
  • 轻松渲染登录、注册和密码重置的表单。
  • 生成登录、注册、密码重置、确认等路由。
  • 生成一个可定制的控制器,用于处理基本的用户账户操作。
  • 包含一组帮助实现基本用户功能的方法。
  • 与 Laravel 的 AuthReminders 组件/配置集成。
  • 用户验证。
  • 登录限制。
  • 认证后重定向到之前的路由。
  • 在注册时检查唯一的电子邮件和用户名。

如果您正在寻找用户角色和权限,请查看 Entrust

有关 MongoDB 支持,请查看 Confide Mongo

警告: 默认情况下会发送确认电子邮件,并要求用户确认电子邮件地址。您可以在 confide 配置文件中轻松更改此设置。如果不想发送电子邮件且用户无需确认即可登录网站,请将 signup_emailsignup_confirm 设置为 false。

快速入门

必需设置

composer.json 文件的 require 键中添加以下内容

"zizaco/confide": "~4.3@dev"

运行 Composer 更新命令

$ composer update

在您的 config/app.php 中,将 'Zizaco\Confide\ServiceProvider' 添加到 providers 数组的末尾

'providers' => array(

    'Illuminate\Foundation\Providers\ArtisanServiceProvider',
    'Illuminate\Auth\AuthServiceProvider',
    ...
    'Zizaco\Confide\ServiceProvider',

),

config/app.php 的末尾,将 'Confide' => 'Zizaco\Confide\Facade' 添加到 aliases 数组

'aliases' => array(

    'App'        => 'Illuminate\Support\Facades\App',
    'Artisan'    => 'Illuminate\Support\Facades\Artisan',
    ...
    'Confide'    => 'Zizaco\Confide\Facade',

),

配置

设置 config/auth.php 中的正确值。这些值将由 confide 用于生成数据库迁移以及生成控制器和路由。

设置 config/mail.phpfrom 数组的 addressname。这些值将用于向用户发送账户确认和密码重置电子邮件。

用户模型

现在生成 Confide 迁移和密码重置提醒表迁移

$ php artisan confide:migration

它将生成 <timestamp>_confide_setup_users_table.php 迁移。您现在可以使用 artisan migrate 命令运行它

$ php artisan migrate

它将设置一个包含 emailpasswordremember_tokenconfirmation_codeconfirmed 列的表,这些是 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自动加载

$ composer dump-autoload

现在你已经准备好开始使用了。 访问 http://yourapp/users/create 来创建你的第一个用户。检查 app/routes.php 来查看可用的路由。您可能需要通过“访问”其 confirm() 方法来确认一个新创建的用户(否则,您可以在配置文件中禁用确认作为登录的要求,见下文)

详细使用说明

基本设置

  1. config/database.php 中的数据库连接运行正常。
  2. config/auth.php 中的正确模型和表名。Confide 将始终使用这些值(特别是在生成迁移和控制器时)
  3. config/mail.php 中的 from 配置。

配置

  1. config/app.php 中的 'providers''aliases' 分别包含 'Zizaco\Confide\ServiceProvider''Confide' => 'Zizaco\Confide\Facade' 条目。
  2. 用户模型(与 config/auth.php 中的名称相同)应该实现 Zizaco\Confide\ConfideUserInterface 接口。这将使 forgotPassword()confirm() 等方法可用。

可选步骤

  1. 您可以在用户模型中可选地使用 Zizaco\Confide\ConfideUser 特性。这将节省大量时间,并使用“confide的默认”实现来处理用户。如果您希望进行更多定制,可以编写自己的代码。
  2. 使用 Confide 门面通过 makeLoginForm()makeSignupForm() 轻松导出登录和注册表单。您可以通过执行 {{ Confide::makeLoginForm()->render() }} 在视图中渲染这些表单。
  3. 通过 artisan 命令 $ php artisan confide:controller 使用 Confide 中的模板生成一个 控制器 和一个 仓库。如果已存在同名控制器,它将 不会 被覆盖。
  4. 通过 artisan 命令 $ php artisan confide:routes 生成与控制器模板匹配的路由。别担心,您的 routes.php不会 被覆盖。

高级

UserRepository

您可能已经注意到,在生成控制器时还创建了一个 UserRepository 类。该类包含一些不属于“控制器”目的的代码,这将使您的用户控制器更干净、更易于测试。如果您仍然不知道这个类为什么存在,我建议您在 Google 上搜索 "在 Laravel 4 中使用仓库创建灵活的控制器"。( wink)

使用自定义类、表或模型名称

您可以在 config/auth.php 文件中更改将被视为用户的模型名称。Confide 使用该配置文件中存在的值。

当导出默认控制器模板时,您可以使用 --name 选项来更改控制器名称。

$ php artisan confide:controller --name=Employee

将产生 EmployeeController

然后,在导出路由时,您应该使用 --controller 选项来匹配现有控制器。

$ php artisan confide:routes --controller=Employee

您还可以生成带有命名空间的控制器

$ php artisan confide:controller --name=MyProject\\Auth\\User

警告:在 bash 中,您需要使用双反斜杠。这将产生 MyProject\Auth\UserController。生成的文件将位于与命名空间等效的目录中。( wink)

使用自定义表单或电子邮件

首先,发布配置文件

$ php artisan config:publish zizaco/confide

然后编辑 app/config/packages/zizaco/confide/config.php 中的视图名称。

初始化

要初始化您的用户表,您还应该填写 password_confirmationconfirmation_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);

它会产生相同的输出,但您可以使用'with'添加更多输入,就像其他视图一样。

RESTful控制器

如果您想生成RESTful控制器,可以使用额外的--restful-r选项。

$ php artisan confide:controller --restful

将生成RESTful控制器

然后,在导出路由时,您应该使用--restful选项来匹配现有的控制器。

$ php artisan confide:routes --restful

用户角色和权限

为了不使Confide膨胀与不相关的功能,角色和权限作为另一个包开发:Entrust。Enstrust与Confide配合得非常好。

Entrust

登录后重定向到之前的路由

在定义您的过滤器时,您应该在auth过滤器中使用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函数在成功登录后使用Redirect:intended('a/default/url/here')进行自动重定向。生成的控制器确实如此。

故障排除

[2014-07-18 01:13:15] production.ERROR: 异常 'Illuminate\Database\QueryException',消息 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'password_confirmation' in 'field list' (SQL: insert into `users` ...

在将对象发送到数据库之前,应该从对象中删除password_confirmation属性。确保您的用户模型实现ConfideUserInterface并使用ConfideUser特质,如上所述。否则,如果您使用自定义验证器,您必须在保存用户之前取消设置password_confirmation

我需要我的用户有一个"用户名"

在生成confide迁移和控制器时使用--username选项。

$ php artisan confide:migration --username
...
$ php artisan confide:controller --username

如果您想将用户名作为必填字段,您将必须扩展UserValidator并重写$rules属性,将"用户名"设置为required

当我尝试登录时收到一条消息“您的账户可能未确认”

您需要确认新创建的用户(通过“调用”其confirm()方法),否则您可以在配置文件中禁用确认作为登录的要求(见下文)。您可以使用Laravel的artisan tinker工具手动确认用户。

我无法生成具有命名空间的控制器

在bash中,您需要使用双反斜杠。同时,生成的文件将位于与命名空间等效的目录中

$ php artisan confide:controller --name=MyProject\\Auth\\User

用户可以不确认账户就登录

如果您只想让已确认的用户登录,在您的UserController中,而不是简单地调用logAttempt( $input ),调用logAttempt( $input, true )。第二个参数代表"confirmed_only"

自从我运行了composer update后,我的应用程序崩溃了

Confide 4.0.0 是一个重大更新,其中所有代码库都已重写。一些类已更改,生成器已改进以匹配一些更好的实践(例如存储库和分离的验证类)。请参阅下方的 发行说明

如果您有一个使用旧版本 Confide 的遗留项目,请放心。您始终可以在您的 composer.json 文件中指定旧版本。

例如: "zizaco/confide": "~3.2" 将避免 composer 下载 4.0 版本,但仍能下载 3.2 版本的错误修复。

发行说明

版本 4.3.0 Beta 1

  • 用户名现在是可选字段。 生成迁移和控制器时使用 --username
  • 通用错误修复。

版本 4.2.0

  • 通用错误修复。
  • 改进了 README.md。
  • 改进了现有的翻译并添加了新的翻译。

版本 4.0.0 RC

  • 通用错误修复。
  • 改进了 README.md。
  • Confide 可以使用队列发送电子邮件。
  • 账户确认令牌不再是基于时间的。

版本 4.0.0 Beta 3

  • 现在您可以自定义密码重置请求过期的时间(默认为 7 小时)。
  • 重新排序验证
  • 现在即使在某个验证失败的情况下,也会调用所有验证。因此,一次发送所有验证消息。
  • validateIsUnique 方法现在发送键到 attachErrorMsg 并同时检查每个 $identity 字段上的错误

版本 4.0.0 Beta 2

  • UserValidator 现在将错误添加到现有的 MessageBag 而不是替换它。
  • 密码重置令牌将在 7 天后过期。
  • 添加了对使用模型 $connection 属性的自定义连接的支持。
  • 密码重置请求在使用后将删除。

版本 4.0.0 Beta 1

  • 删除了 Ardent 依赖。
  • 更新以支持 Laravel 4.2
  • 删除了对 PHP 5.3 的支持。
  • 从现在起,ConfideUser 将成为 trait+interface。
  • 控制器生成现在还生成一个 UserRepository 类。
  • 删除了过时的变量、函数和类。
  • 所有代码库都已重写。

升级说明: 不建议进行部分更新。要从 v3.* 升级到 v4.0.0,最佳做法是更新提供者和别名数组中的类名,使用新的迁移重新生成用户表,重新编写 "user" 类,最后重新生成控制器。您的代码库中进行的任何自定义都可能受到影响。

版本 3.0.0

更新以支持 Laravel 4.1

版本 2.0.0 Beta 4

删除了过时的变量和函数。

  • $updateRules
  • amend()
  • generateUuid
  • getUpdateRules
  • prepareRules
  • getRules
  • setUpdateRules
  • getUserFromCredsIdentity
  • checkUserExists
  • isConfirmed

添加了两个配置值

  • login_cache_field (#161)
  • throttle_time_period (#162)

版本 2.0.0 Beta 3

README 更新

版本 2.0.0 Beta 2

合并了一些拉取请求,并锁定到 Ardent 2.1.x

  • 正确处理验证消息 (#124)
  • 正确验证在 real_save (#110)
  • 使用 Redirect::guest 而不是自定义会话变量来处理认证重定向 (#145)
  • 解决了暴力破解漏洞 (#151)

版本 2.0.0 Beta 2

锁定到 Ardent 1.1.x

版本 1.1.0

贡献

请随意在 GitHub 上分支此项目

编码标准

向 confide 贡献代码时,您必须遵循其编码标准。Confide 遵循在 PSR-2 文档中定义的标准。

文档

  • 为所有类、方法和函数添加 PHPDoc 块
  • 如果方法不返回任何内容,则省略 @return 标签
  • @param@return@throws 前添加一个空行

许可证

Confide 是在 MIT 许可证条款下免费分发的软件

附加信息

如有任何疑问,请随时联系我或在此提问

如有任何问题,请在此报告