ホームページ > バックエンド開発 > PHPチュートリアル > Laravelパーミッションコントロールは認証を組織します

Laravelパーミッションコントロールは認証を組織します

WBOY
リリース: 2016-06-23 13:33:45
オリジナル
888 人が閲覧しました

ユーザー認証

1. ユーザー認証が付属しています

はじめに

Laravel を使用すると、認証メカニズムを非常に簡単に実装できます。実際、ほとんどすべての設定はデフォルトですでに行われています。認証に関連する構成ファイルは config/auth.php に配置されており、これらのファイルには、各オプションに対応する認証サービスを説明する適切なコメントも含まれています。

Laravel には、デフォルトでアプリフォルダー内のデフォルトの Eloquent 認証ドライバーを使用する AppUser モデルが含まれています。

注: この認証モデルのデータベース構造を設計する場合、パスワード フィールドの幅は少なくとも 60 文字である必要があります。繰り返しますが、開始する前に、ユーザー (または他の同義語) データベース テーブルに、長さ 100 の文字列で null を受け入れることができる remember_token というフィールドが含まれていることを確認してください。このフィールドは、「remember me」セッション トークンを保存するために使用されます。これは、移行ファイルの $table-rememberToken(); メソッドを使用して行うこともできます。 もちろん、これらのフィールドはLaravel 5に付属する移行ですでに設定されています。

アプリケーションで Eloquent を使用しない場合は、Laravel のクエリ ビルダーをデータベース認証ドライバーとして使用することもできます。

認証

Laravel には認証関連のコントローラーが 2 つプリセットされています。 AuthController は新規ユーザーの登録と「ログイン」を処理し、PasswordController はすでに登録されているユーザーのパスワードのリセットを支援します。

各コントローラーは、特性を使用して必要なメソッドを導入します。ほとんどのアプリケーションでは、これらのコントローラーを変更する必要はありません。これらのコントローラーで使用されるビューは、resources/views/auth ディレクトリに配置されます。これらのビューは必要に応じて変更できます。

テーブル構造

Laravel 独自の認証には、ユーザー登録、ログイン、パスワードのリセットが含まれます。また、これらの機能に必要なデータ構造も含まれており、以下の場所にあります。

データベースの移行 データベースを設定した後、すべての移行を実行します :

php artisan migrate
ログイン後にコピー

データベースは自動的に次の情報を生成します: users (ユーザー テーブル)、password_resets (リセット パスワード テーブル)、migrations (移行テーブル)

ユーザー登録

アプリケーションが新しいユーザーを登録するときに使用されるフォーム フィールドを変更するには、AppServicesRegistrar クラスを変更します。このクラスは、アプリケーションの新しいユーザーの認証と作成を担当します。

レジストラーの validator メソッドには新規ユーザーの検証ルールが含まれており、レジストラーの create メソッドはデータベースに新しいユーザー レコードを作成する役割を果たします。これらのメソッドは自由に変更できます。 Registrar メソッドは、AuthenticatesAndRegistersUsers トレイトの AuthController から呼び出されます。

ソースコードをご覧ください:

class Registrar implements RegistrarContract {    /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */    public function validator(array $data) {        return Validator::make($data, [            'name' => 'required|max:255',            'email' => 'required|email|max:255|unique:users',            'password' => 'required|confirmed|min:6',        ]);    }    /** * Create a new user instance after a valid registration. * * @param array $data * @return User */    public function create(array $data) {        return User::create([            'name' => $data['name'],            'email' => $data['email'],            'password' => bcrypt($data['password']),        ]);    }}
ログイン後にコピー

2. 手動ユーザー認証

デフォルトの AuthController を使用したくない場合は、Laravel の認証クラスを直接使用してユーザー認証を管理する必要があります。心配しないでください、それも簡単です!まず、attempt メソッドを見てみましょう:

<?php namespace App\Http\Controllers; use Auth; use Illuminate\Routing\Controller; class AuthController extends Controller { /** * Handle an authentication attempt. * * @return Response */ public function authenticate() { if (Auth::attempt(['email' => $email, 'password' => $password])) { return redirect()->intended('dashboard'); } } }
ログイン後にコピー

attempt メソッドは、最初のパラメーターとしてキーと値のペアの配列を受け入れることができます。パスワードの値は最初にハッシュ化されます。配列内の他の値は、データ テーブル内のユーザーのクエリに使用されます。したがって、上記の例では、ユーザーは電子メール列の値に基づいて検索されます。ユーザーが見つかった場合は、データベースに保存されているハッシュ化されたパスワードが、配列内のハッシュ化されたパスワード値と比較されます。 2 つのハッシュ化されたパスワードが同じであると仮定すると、ユーザーに対して認証されたセッションが再開始されます。

認証が成功すると、attempt は true を返します。それ以外の場合は false を返します。

** 注: 上記の例では、電子メール フィールドを使用する必要はありません。これは単なる例です。データテーブルの「ユーザー名」に対応する任意のキーを使用する必要があります。

意図されたメソッドは、ユーザーがアクセスしようとしている URL にリダイレクトされ、その値は認証フィルタリングの前に保存されます。リダイレクトされた URL が使用できなくなるのを防ぐために、デフォルトの URI をこのメソッドに渡すこともできます。

特定の条件でユーザーを検証する

認証プロセス中に、追加の認証条件を追加することができます:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])){    // The user is active, not suspended, and exists.}
ログイン後にコピー

ご覧のとおり、アクティブなフィールド検証がこの検証に追加されます。

ユーザーを認証し、彼を「記憶」します

アプリケーションに「私を記憶」機能を提供したい場合は、試行メソッドの 2 番目のパラメーターとしてブール値を渡すことができます。これにより、ユーザーの認証は次のようになります。 ID は保持されます (または手動でログアウトするまで)。もちろん、ユーザー データ テーブルには、「remember me」識別子を格納するための文字列型の remember_token 列が含まれている必要があります。

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)){    // The user is being remembered...}
ログイン後にコピー

「Remember Me」機能を使用する場合、viaRemember メソッドを使用して、ユーザーが「Remember Me」Cookie を持っているかどうかを確認できます。 ユーザー認証を確認します:

if (Auth::viaRemember()){    //}
ログイン後にコピー

3. ユーザーが認証されているかどうかを確認します。ユーザーが認証されているかどうかを確認する ログインするには、次の check メソッドを使用できます:

if (Auth::check()){    // The user is logged in...}
ログイン後にコピー

4. ログインせずに検証のみを行う

validate メソッドを使用すると、実際にアプリケーションにログインせずにユーザーの認証情報を検証できます

if (Auth::validate($credentials)){    //}
ログイン後にコピー

5 . 単一のリクエストでユーザーをログインします

once メソッドを使用して、単一のリクエストでユーザーをログインすることもできます。セッションや Cookie は生成されません:

if (Auth::once($credentials)){    //}
ログイン後にコピー

6. 用户实例登录

假如你需要将一个已经存在的用户实例登陆应用,你可以调用 login 方法并且传入用户实例:

Auth::login($user);
ログイン後にコピー

安全退出

当然,假设你使用 Laravel ?建的认证控制器,预设提供了让用户登出的方法。

Auth::logout();
ログイン後にコピー

取得通过验证的用户实例

1. 从 Auth facade 取得

<?php namespace App\Http\Controllers; use Illuminate\Routing\Controller; class ProfileController extends Controller { /** * Update the user's profile. * * @return Response */ public function updateProfile() { if (Auth::user()) { // Auth::user() returns an instance of the authenticated user... } } }
ログイン後にコピー

2. Illuminate\Http\Request 实例取得

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; class ProfileController extends Controller { /** * Update the user's profile. * * @return Response */ public function updateProfile(Request $request) { if ($request->user()) { // $request->user() returns an instance of the authenticated user... } } }
ログイン後にコピー

3.使用 Illuminate\Contracts\Auth\Authenticatable contract 类型提示

<?php namespace App\Http\Controllers;use Illuminate\Routing\Controller;use Illuminate\Contracts\Auth\Authenticatable;class ProfileController extends Controller {    /** * Update the user's profile. * * @return Response */    public function updateProfile(Authenticatable $user) {        // $user is an instance of the authenticated user...    }}
ログイン後にコピー

参考地址:http://laravel-china.org/docs/5.0/authentication

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート