Confide 用戶身份認(rèn)證

2018-02-24 15:53 更新

Confide提供了認(rèn)證模塊,包含了登錄、注冊(cè)、退出、密碼重置等功能。

項(xiàng)目地址

https://github.com/zizaco/confide 暫時(shí)未支持Laravel 5

英文通讀水平有限,記下為妙,文檔瞎翻如下(意譯):

Confide針對(duì)Laravel提供了全套的身份驗(yàn)證解決方案,它可以減少涉及用戶管理的重復(fù)工作。包含創(chuàng)建賬戶,登陸,登出,E-MAIL驗(yàn)證密碼重置等有用的功能。

Confide的目標(biāo)是簡(jiǎn)單易用,快速配置和靈活使用。

注意:如果你使用的是MongoDB,請(qǐng)使用Confide Mongo
https://github.com/Zizaco/confide-mongo

產(chǎn)品特點(diǎn):

當(dāng)前:

  1. 賬號(hào)確認(rèn)(通過確認(rèn)鏈接)。
  2. 密碼確認(rèn)(發(fā)送一封帶有重設(shè)密碼鏈接的EMAIL)。
  3. 簡(jiǎn)單方便的創(chuàng)建登陸,注冊(cè)和密碼重設(shè)的表單。
  4. 為登陸,注冊(cè),密碼重設(shè),確認(rèn)等生成路由。
  5. 生成一個(gè)可定制的控制器,包含了基礎(chǔ)的用戶賬戶行為。
  6. 包含一組用于幫助解決用戶基本特性的方法。
  7. 集成了Laravel AuthReminders component/configs.
  8. 用戶驗(yàn)證。
  9. 登陸控制。
  10. 驗(yàn)證后跳轉(zhuǎn)至先前的路由。
  11. 檢查注冊(cè)中獨(dú)特的email和username。

如果你需要的是用戶角色和權(quán)限控制請(qǐng)看Entrust

警告: 默認(rèn)會(huì)發(fā)送一封確認(rèn)郵件用于驗(yàn)證用戶的郵件地址。在confide的config文件可以改變這個(gè)設(shè)置,將signup_email和 signup_confirm設(shè)置為false,就不必發(fā)送郵件并驗(yàn)證郵件地址了。

快速開始

需要的設(shè)置

在composer.json文件的require鍵中加入如下代碼

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

運(yùn)行Composer更新命令

$ composer update

Zizaco\Confide\ServiceProvider 添加到 app/config/app.phpproviders 數(shù)組的后面

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

'Confide' => 'Zizaco\Confide\Facade' 加入到 app/config/app.phpaliases 數(shù)組的末尾

'aliases' => array( 
    'App' => 'Illuminate\Support\Facades\App', 
    'Artisan' => 'Illuminate\Support\Facades\Artisan', 
    ... 
    'Confide' => 'Zizaco\Confide\Facade', 
), 

配置

app/config/auth.php中設(shè)置屬性值。這個(gè)值將被confide用于生成數(shù)據(jù)庫(kù)遷移以及生成工資器和路由。

config/mail.php設(shè)置右鍵地址和名稱,他們將被用于向用戶發(fā)送賬戶驗(yàn)證和密碼重設(shè)右鍵。

用戶模型

現(xiàn)在生成Confide遷移和密碼提醒表的遷移:

$ php artisan confide:migration 

將生成_confide_setup_users_table.php的遷移。你可以使用 artisan migrate 命令運(yùn)行它:

$ php artisan migrate 

將會(huì)生成一張包含email, password, remember_token, confirmation_codeconfirmed列的表,這些都是Confide需要使用的默認(rèn)字段。你還可以自由的向此表添加更多的字段。

將你在 app/models/User.php 中的用戶模型變成:

<?php 
use Zizaco\Confide\ConfideUser; 
use Zizaco\Confide\ConfideUserInterface; 
class User extends Eloquent implements ConfideUserInterface { 
    use ConfideUser; 
}
?>

ConfideUser特性將會(huì)妥善的處理用戶模型的的一些行為。

裝儲(chǔ)默認(rèn)的訪問

最后,你可以為confide裝儲(chǔ)默認(rèn)的控制器, 知識(shí)庫(kù)以及默認(rèn)路由.

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

別忘記運(yùn)行以下命令對(duì)自動(dòng)加載進(jìn)行優(yōu)化

$ composer dump-autoload 

準(zhǔn)備好出發(fā)了嗎. 使用 http://yourapp/users/create 創(chuàng)建你的第一用戶,打開 app/routes.php 查看可用的路由。你需要確認(rèn)最新創(chuàng)建的用戶(通過”reaching”他自身的confirm()方法),除此之外你可以再配置中禁用登陸要求驗(yàn)證的配置(看下面)。

詳細(xì)使用說明

基本設(shè)置:

  1. config/database.php 中配置的數(shù)據(jù)庫(kù)連接需要正確地運(yùn)行。
  2. config/auth.php 中的模型和表的名稱要正確,因?yàn)闀?huì)被Confide一直使用(特別是生成遷移和控制器)。
  3. from 配置在 config/mail.php 中。

配置:

  1. ‘Zizaco\Confide\ServiceProvider’‘Confide’ => ‘Zizaco\Confide\Facade’ 分別加入 config/app.php‘providers’ 和 d 數(shù)組里。
  2. 用戶模型 (在 config/auth.php 中相同名稱) 需要實(shí)現(xiàn) Zizaco\Confide\ConfideUserInterface 接口. 這樣可以使 forgotPassword() and confirm() 這些方法變可用。

可選步驟:

  1. 可選地你可以在你的用戶模型使用 Zizaco\Confide\ConfideUser 特性。這個(gè)特性將會(huì)為用戶啟用”confide’s default”,這會(huì)節(jié)約很多時(shí)間。如果你期待更多的定制你可以編寫自己的代碼。

  2. 使用Confide facade可以輕松的使用 makeLoginForm()makeSignupForm() 生成loginsignup表單。你可以使用如下代碼展現(xiàn)你的表單{{ Confide::makeLoginForm()->render() }}.

  3. 如果需要從Confide模板生成控制器和知識(shí)庫(kù),可以使用 $ php artisan confide:controller 命令。如果當(dāng)前已經(jīng)存在相同名稱的控制器,不會(huì)覆蓋。

  4. 使用 $ php artisan confide:routes 可以從Confide模板生成匹配控制器的路由。別擔(dān)心,你的路由不會(huì)被覆蓋。

高級(jí)

UserRepository類

你可能已經(jīng)注意到當(dāng)生成控制器的時(shí)候同樣會(huì)創(chuàng)建一個(gè)UserRepository類。這個(gè)類包含一些不屬于”controoler”目標(biāo)的代碼,將你的類變的更干凈和更有可測(cè)試性。如果你還是不明白這個(gè)類為什么不存在,我推薦你使用”Creating flexible Controllers in Laravel 4 using Repositories”(在Laravel4中使用倉(cāng)庫(kù)生成彈性控制器)搜索google。

使用自定義的類,表以及模型名稱

你可以修改config/auth.php文件中關(guān)聯(lián)用戶的的模型名稱。Confide目前使用在該配置文件中的值。

在從controller模板生成控制器時(shí)可以使用–name參數(shù)改變控制器名稱。

$ php artisan confide:controller --name=Employee 

結(jié)果會(huì)是 EmployeeController

接著,當(dāng)生成路由的時(shí)候, 你需要使用 –controller 參數(shù)來匹配已經(jīng)存在的controller.

$ php artisan confide:routes --controller=Employee 

你也可以使用帶namespace命名空間的控制器

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

警告: 在bash中,你需要使用雙反斜杠符號(hào)’\’ 。會(huì)得到這樣的 MyProject\Auth\UserController 路徑。當(dāng)然生成文件將加入到命名空間等同的文件目錄(原諒我不會(huì)翻譯這句)。

使用自定義表單和郵箱

首先,發(fā)布配置文件:

$ php artisan config:publish zizaco/confide 

然后在app/config/packages/zizaco/confide/config.php文件中修改視圖名稱。

比對(duì)

要比對(duì)你的用戶表你還需要添加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); 
        } 
    } 
} 

自定義用戶驗(yàn)證

你可以通過創(chuàng)建一個(gè)類實(shí)行你自己的驗(yàn)證器,它需要實(shí)現(xiàn)了UserValidatorInterface接口和注冊(cè)為類似”confide.user_validator”的類。

例如,創(chuàng)建你自己的驗(yàn)證器類:

// app/models/MyOwnValidator.php 
class MyOwnValidator implements UserValidatorInterface { 

    public function validate(ConfideUserInterface $user) { 
         unset($user->password_confirmation); 
         return true; // If the user valid 
    } 
} 

然后在IoC容器里注冊(cè)為 “confide.user_validator”

// app/start/global.php 
//... 
App::bind('confide.user_validator', 'MyOwnValidator'); 

同樣的,在保存之前別忘記你的驗(yàn)證器需要復(fù)原’password_confirmation’屬性。

給”make”方法傳遞額外的信息

如果你想給已經(jīng)渲染的表單傳遞額外的參數(shù),你可以使用另外一種語(yǔ)法來實(shí)現(xiàn)這一目標(biāo)。

替代使用make方法:

Confide::makeResetPasswordForm($token): 

你可以使用:

View::make(Config::get('confide::reset_password_form')) 
->with('token', $token); 

它產(chǎn)生相同的輸出,但是你可以像其它視圖一樣使用width來添加更多輸入。

RESTful controller

如果你想生成一個(gè) RESTful controller 你可以使用 –restful-r 參數(shù)項(xiàng)。

$ php artisan confide:controller --restful 

將會(huì)得到一個(gè) RESTful controller

接著生成路由的時(shí)候,需要使用–resful參數(shù)來匹配已經(jīng)存在的路由。

$ php artisan confide:routes --restful 

用戶角色和權(quán)限

為了使Confide的代碼量不至于膨脹,角色和權(quán)限使用另外一個(gè)擴(kuò)展包:Entrust
EntrustConfide是一對(duì)好基友。

See Entrust - https://github.com/Zizaco/entrust

在登陸后跳轉(zhuǎn)至預(yù)設(shè)好的路由

在定義你的篩選器的時(shí)候你需要使用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(chǎn)/default/url/here’),成功登陸后會(huì)默認(rèn)跳轉(zhuǎn)。生成的控制器已經(jīng)完成了這些。

故障排除

[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 …

在發(fā)送到數(shù)據(jù)庫(kù)前需要將password_confirmation從項(xiàng)目中移除。保證你的用戶模型實(shí)現(xiàn)了ConfideUserInterface接口,如上所述他使用了ConfideUser特性。除此之外,如果你使用了自定義的驗(yàn)證器,你需要在保存用戶前復(fù)原password_confirmation。

我需要我的用戶有 “username”

當(dāng)生成confide和controller遷移的時(shí)候使用–username參數(shù)。

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

如果你想讓username變成必填項(xiàng),你需要擴(kuò)展UserValidator和重寫$rules屬性。

當(dāng)我嘗試登陸的時(shí)候我收到 “Your account may not be confirmed” (你的賬號(hào)沒有確認(rèn))

你需要驗(yàn)證最新創(chuàng)建的用戶 (by “reaching” its confirm() method),除此之外你可以再配置文件中取消必須驗(yàn)證的配置。
你可以很輕松的驗(yàn)證用戶,通過使用Laravel的artisan修補(bǔ)工具。

我沒法生成帶有命名空間的控制器

在bash中,你需要使用雙反斜杠符號(hào)’\’。

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

用戶不用驗(yàn)證賬號(hào)就能登錄

如果你想只有驗(yàn)證的用戶才能登錄,在你的UserController中,用logAttempt( $input, true )代替用logAttempt( $input )。第二個(gè)參數(shù)代表”confirmed_only”。

當(dāng)我運(yùn)行composer update更新的時(shí)候,我的應(yīng)用崩潰了

Confide 4.0.0 是一個(gè)巨大的所有代碼都被重寫的更新。一些類改變,生成器被改進(jìn)為了匹配某些更好的實(shí)務(wù)(比如代碼庫(kù)和分開驗(yàn)證器類)。查看下面的Release Notes。

如果你有一個(gè)遺產(chǎn)項(xiàng)目使用了較老的Confide版本。別擔(dān)心,你永遠(yuǎn)可以在composer.json指定一個(gè)早先的版本。

例如: “zizaco/confide”: “~3.2″將會(huì)避免下載4.0版本。只會(huì)下載3.2終極版。


原文地址:http://www.zhangxihai.cn/archives/160

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)