実践Laravel 基本編13 Auth認証その1

Posted: 2014-07-24 23:11 |  laravel 
公式や、色んなところにたくさん情報がありますので、
あえてたくさん書く必要はありませんが、
今回はLaravelで用意されている便利なものの一つ、認証系コンポーネントに触れてみます。
とは言っても、デフォルトで用意されているものは非常にシンプルです。
ソースコードを読むと更に簡単だという事がわかると思います。
ここでは認証の使い方ではなく、中身を見ていきましょう。

illuminate/auth
/vendor/laravel/framework/src/Illuminate/Auth がAuthコンポーネントです。
デフォルトでAuth対応ドライバーはdatabase, eloquent が選択できますが、それぞれは
DatabaseUserProvider.php
EloquentUserProvider.php
にあたります。
UserProviderInterfaceを継承して実装されています。
Authファサードを介して使用しているクラスは、Guard.phpです。
AuthManager.phpでそれぞれのドライバに対応したGuardクラスのインスタンスがreturnされます。
GenericUser.phpはgetter、setterとなっています。
これらに目を通しておくとAuthの処理がどのように動いているのか、
または独自のAuthドライバーを使用する場合でも、実装しやすいと思います。
一番利用しやすいのは、
Auth::attempt()
だとおもいます。

Auth::attempt()

attemptは、それぞれのUserProviderの
retrieveByCredentialsが対応しています。
attemptで使用する引数は、

* @param  array  $credentials
* @param  bool   $remember
* @param  bool   $login
です。
お使いのテーブル定義に合わせて、
第一引数の配列でカラム名、バリューを指定すると、
それぞれに対応したSQLが発行されます。
’password’はここでは処理されず、
validateCredentials でHashクラスを利用して、パスワードが正しいかどうか比較され、
booleanが返却される様になっています。

デフォルトそのままを利用される場合は、次の様なテーブルを用意すると、
そのままで実装できます
public function up()
{
    \Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('username', 32);
        $table->string('email', 255);
        $table->string('remember_token', 64);
        $table->string('password', 64);
        $table->timestamps();
    });
}
eloquentではなく、databaseを利用してお使いの定義に合わせる場合は、
それぞれのdatabaseに対応したクラスをextendして、
'id'や、'password'を任意のカラム名などに変更するか、
独自のAuthクラスを作っても構いません。
余談ですが、SQLアンチパターンという有名な本も見ておくと良いかもしれませんね
(idというPKで本当にいいのかどうか)
SQLアンチパターン
Auth::loginUsingId()は、
PKからユーザーを取得します。
パスワードによる認証は行われないため、独自に実装して、
Auth::loginUsingId()でログインさせ、
Authを通じてユーザー情報を取得するのがいいかもしれません。

実装方法次第では、Authを利用するたびにDBアクセスが発生するため
小規模以外の環境ではあまりおすすめしません。
Sessionを使用して、ログイン情報を保持したり、
または会社で用意されているAPIなどを利用してログインを管理している場合ですとか、
OAuthで管理して、システムそのものではアカウントを管理していない様なシステムの場合は、
独自に実装するといいでしょう。

次回は独自でAuthを認証する為のヒントです

 

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014