ホームページ >バックエンド開発 >PHPチュートリアル >Laravelパーミッションコントロールは認証を組織します
Laravel には、デフォルトでアプリフォルダー内のデフォルトの Eloquent 認証ドライバーを使用する AppUser モデルが含まれています。
注: この認証モデルのデータベース構造を設計する場合、パスワード フィールドの幅は少なくとも 60 文字である必要があります。繰り返しますが、開始する前に、ユーザー (または他の同義語) データベース テーブルに、長さ 100 の文字列で null を受け入れることができる remember_token というフィールドが含まれていることを確認してください。このフィールドは、「remember me」セッション トークンを保存するために使用されます。これは、移行ファイルの $table-rememberToken(); メソッドを使用して行うこともできます。 もちろん、これらのフィールドはLaravel 5に付属する移行ですでに設定されています。
認証
各コントローラーは、特性を使用して必要なメソッドを導入します。ほとんどのアプリケーションでは、これらのコントローラーを変更する必要はありません。これらのコントローラーで使用されるビューは、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. 手動ユーザー認証
<?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.}ご覧のとおり、アクティブなフィールド検証がこの検証に追加されます。
ユーザーを認証し、彼を「記憶」します
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...}
validate メソッドを使用すると、実際にアプリケーションにログインせずにユーザーの認証情報を検証できます
if (Auth::validate($credentials)){ //}
once メソッドを使用して、単一のリクエストでユーザーをログインすることもできます。セッションや Cookie は生成されません:
if (Auth::once($credentials)){ //}
假如你需要将一个已经存在的用户实例登陆应用,你可以调用 login 方法并且传入用户实例:
Auth::login($user);
当然,假设你使用 Laravel ?建的认证控制器,预设提供了让用户登出的方法。
Auth::logout();
<?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... } } }
<?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... } } }
<?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