Confide 用户身份认证

2018-02-24 15:53 更新

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 AuthReminders 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.phpproviders 数组的后面

'providers' => array( 
    'Illuminate\Foundation\Providers\ArtisanServiceProvider', 
    'Illuminate\Auth\AuthServiceProvider', 
    ... 
    'Zizaco\Confide\ServiceProvider', 
), 

'Confide' => 'Zizaco\Confide\Facade' 加入到 app/config/app.phpaliases 数组的末尾

'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_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 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() 生成loginsignup表单。你可以使用如下代码展现你的表单{{ 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
EntrustConfide是一对好基友。

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

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号