mdsys/confide

Confide 是 Laravel 4 的认证解决方案

dev-master 2014-04-16 21:17 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:44:22 UTC


README

Confide Poster

Build Status ProjectStatus

Confide 是一个用于 Laravel4 的认证解决方案,旨在消除涉及用户管理的重复性任务:账户创建、登录、登出、电子邮件确认、密码重置等。

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

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

功能

当前

  • 账户确认(通过确认链接)。
  • 密码重置(发送带有更改密码链接的电子邮件)。
  • 轻松渲染登录、注册和密码重置表单。
  • 生成可自定义的登录、注册、密码重置、确认等路由。
  • 生成可自定义的控制器来处理基本用户账户操作。
  • 包含一组帮助基本用户功能的方法。
  • 与 Laravel Auth 组件/配置集成。
  • 字段/模型验证(由Ardent提供支持)。
  • 登录节流。
  • 认证后重定向到之前的路由。
  • 在注册中检查唯一的电子邮件和用户名。

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

有关 MongoDB 支持,请参阅Confide Mongo

计划

  • 用户注册和密码重置中的验证码。

警告

默认情况下,会发送确认电子邮件,并要求用户确认电子邮件地址。您可以在 confide 配置文件中轻松更改此设置。如果要发送电子邮件,则将 signup_email 和 signup_confirm 更改为 false,这样他们就不需要确认即可登录网站。

快速入门

所需设置

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

"zizaco/confide": "3.2.x"

运行 Composer 更新命令

$ composer update

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

'providers' => array(

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

),

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

'aliases' => array(

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

),

配置

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

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

用户模型

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

$ php artisan confide:migration

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

$ php artisan migrate

它将设置一个包含 emailpasswordconfirmation_codeconfirmed 字段的表,这些是 Confide 使用所需的默认字段。您可以根据需要向数据库添加更多字段。

将您的 User 模型在 app/models/User.php 中修改为

<?php

use Zizaco\Confide\ConfideUser;

class User extends ConfideUser {

}

ConfideUser 类将处理用户模型的一些行为。

导出默认访问器

最后,您可以导出 Confide 的默认控制器和默认路由。

$ php artisan confide:controller
$ php artisan confide:routes

别忘了导出 composer 自动加载

$ composer dump-autoload

您已经准备好开始了。 访问 http://yourapp/user/create 创建您的第一个用户。检查 app/routes.php 查看可用的路由。

详细用法

基本设置

  1. config/database.php 中的数据库连接运行正常。
  2. config/auth.php 中的正确模型和表名。Confide 将始终使用这些。
  3. config/mail.php 中的 from 配置。

配置

  1. config/app.php 中的 'providers''aliases' 分别包含 ConfideServiceProviderConfideFacade
  2. 用户模型(与 config/auth.php 中的名称相同)应该扩展 ConfideUser 类。这将导致 resetPassword()confirm() 和重载的 save() 方法可用。

可选步骤

  1. 使用 Confide 门面,通过 makeLoginForm()makeSignupForm() 轻松生成登录和注册表单。您可以通过执行 {{ Confide::makeLoginForm()->render() }} 在您的视图中渲染表单。
  2. 使用 artisan 命令 $ php artisan confide:controller 生成包含 Confide 模板的控制台。如果存在同名控制器,它将 不会 被覆盖。
  3. 使用 artisan 命令 $ php artisan confide:routes 生成与控制器模板匹配的路由。您的 routes.php不会 被覆盖。

高级

使用自定义表/模型名称

您可以在 config/auth.php 文件中更改将进行身份验证的模型名称。Confide 使用该配置文件中的值。

要更改生成默认控制器模板时的控制器名称,可以使用 --name 选项。

$ php artisan confide:controller --name Employee

结果将是 EmployeeController

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

$ php artisan confide:routes --controller Employee

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

首先,发布配置文件

$ php artisan config:publish zizaco/confide

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

更新用户

为了更新数据库中已有的用户,您需要确保您的规则集在用户模型中使用唯一验证器。

<?php

use Zizaco\Confide\ConfideUser;

class User extends ConfideUser {

public static $rules = array(
    'username' => 'unique:users,username',
    'email' => 'email'
);

?>

<?php 

class UserController extends Controller {

    public function postCreate() {

        // In real usage you'll need to find the user that is being modified.
        // 1 is set just as an example.
        $user = User::find(1);
    
        // Update a user attribute from a form.
        // Using email as an example.
        $user->email = Input::get('email'); 
    
        // Save
        // This was previously update, but Ardent changed.
        $user->updateUniques(); 
  
    }
}

?>

这将允许您更新当前用户。

验证模型字段

要更改用户模型的验证规则,可以查看 Ardent。例如

<?php

use Zizaco\Confide\ConfideUser;

class User extends ConfideUser {

    /**
     * Validation rules
     */
    public static $rules = array(
        'email' => 'required|email',
        'password' => 'required|between:4,11|confirmed',
    );

}

您可以为您的表和验证数组添加更多字段。然后,您应该构建包含附加字段的自己的注册表单。

注意:如果您在模型中添加了上述验证规则中的字段,请记住您还必须将这些字段添加到 UserController 的 store 函数中。如果您忘记这样做,表单将始终返回错误。例如:$user->terms = Input::get('terms');

向 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。此包与 Confide 非常匹配。

请参阅 Entrust

登录后重定向到上一个路由

在定义过滤器时,您应该在 auth 过滤器中使用 Redirect::guest('user/login')。例如

// filters.php

Route::filter('auth', function()
{
    if ( Auth::guest() ) // If the user is not logged in
    {
        return Redirect::guest('user/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('user/login');
} );

最后,如果控制器中的 user/login 函数在登录成功后使用 Redirect::intended('a/default/url/here'),它将自动重定向。生成的控制器正是这样做的。

验证路由

如果您想验证路由是否存在,Confide::checkAction 函数就是您要找的。

目前它在视图中用于确定非 RESTful 与 RESTful 路由。

故障排除

[异常] SQLSTATE[HY000]: 一般错误:1364 字段 'confirmation_code' 没有默认值...

如果您在模型中覆盖了 beforeSave() 方法,请确保调用 parent::beforeSave()

public function beforeSave( $forced = false ){

    parent::beforeSave( $forced) // Don't forget this

    // Your stuff
}

用户注册时未发送确认链接

与上述情况相同。如果您在模型中覆盖了 afterSave() 方法,请确保调用 parent::afterSave()

用户可以未经确认即可登录

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

版本发布说明

版本 3.0.0

更新以支持 Laravel 4.1

版本 2.0.0 测试版 4

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

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

添加了两个配置值

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

版本 2.0.0 测试版 3

更新 Readme

版本 2.0.0 测试版 2

合并了一些 pull 请求,并将版本锁定为 Ardent 2.1.x

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

版本 2.0.0 测试版 2

版本锁定为 Ardent 1.1.x

版本 1.1.0

许可证

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

附加信息

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

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