skillup

技術ブログ

PHP

Laravelの認証(独自テーブル仕様)

投稿日:2018年2月11日 更新日:

Laravelで独自の認証をしたいときに少々大変だったのでメモなどを。

*ディフォルトのテーブルはuserで認証項目もemailとpasswordと決まっています。

いじるところが色々ありまして、列挙すると以下のような感じでしょうか。

  1. 認証用のテーブルのモデルを作成
  2. 認証テーブルを読み込むようconfig/auth.phpを修正
  3. コントローラー内での認証処理
  4. ルーティングで呼び出しを設定

まずは「認証用のテーブルのモデルを作成」モデルの登録から。

ディフォルトだとUserというモデル(実際のテーブル名はusers)となっていますので、これをAdminにしたいとします。

と言ってもただのAdminモデルを使っても認証テーブルとしては機能せず、下記のように認証機能が備わっているモデルを継承する必要があります。

最小構成のAdmin.php。パスはApp/Model/Admin.phpです。

よく見るとUserにもこれがついていますね・・・

Laravel 5.3で認証関連機能のテーブル名を変更する方法

ちなみにfillableというのは更新系の処理で予期せぬ値が登録されることを防ぐための仕組みのようです。

【Laravel:Eloquentクラス】fillableとguardedの指定はどちらかだけでいい

次に「認証テーブルを読み込むようconfig/auth.phpを修正」のステップです。このモデルを読むようにconfig/auth.phpで設定変更をする必要があります。apiの記述をわざと抜いてます。

実際に「コントローラー内での認証処理」は下記のようになります。

app/Http/Controllers/Auth/LoginController.php

設定をしたら「ルーティングで呼び出しを設定」をします。

ちなみにURL自体はprefixにauthが必須と言うわけではないのでを通常のURL内にmiddleware=>authだけを定義して認証状態をコントールできます。

また認証ページ(/auth/home)に認証なしにアクセスしようとすると飛ばすページを定義するには下記のように設定をします。

./app/Exceptions/Handler.php

この場合http://samle.com/auth/homeにアクセスしようとすると、このアクションはauthで認証が聞いているので、http://sample.com/auth/loginに飛ばされるようになります。

*まだ調査中ですが、非ログイン時にリダイレクトされるのは./app/HttpControllers/Auth内の他のファイル(例えばResetPasswordController.php)のredirectToの値で決まるようです。

ちなみに標準だとパスワードのハッシュ化にはbcryptというロジックで実装されます。

データベースに直でデータを入れたいときはbcrypt(‘生パスワード’)と加工してPHPから突っ込んであげれば大丈夫です。

照合に関して

また入力した値がパスワードと一致するかは通常はAuthライブラリをそのまま使うので直接見ることはないかもしれませんが、何らかの用途で使う必要がある時は通常は下記のようにします。

Laravel 5 現在のパスワードを入力チェックする

 

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cakePHP3インストール

PHP7に上がりましたが、それ以前にcakeがversion3になっていますね。 いずれはこれでリプレイスをしなくてはいけないので、今日とりあえずインストールしてみました。 原則としてcomposer …

no image

LaravelでのAPI実装

Laravelで外部からAPI叩いてデータ入力みたいなことをしたかったのでこれを機に勉強。認証とかを通してないのでそのまま公開すると危険です・・(汗) 参考リンク [PHP] Laravel5.6で、 …

no image

PHPのPDF出力に関するエラー

PHPからFPDFなどを使ってPDFを出力するプログラムを書いたんですが、下記のエラーでかなり悩まされました。 FPDF error: Some data has already been outpu …

no image

CakePHPでのプレフィックスルーティング

cakePHPではルーティングがデフォルトでは/コントローラ名/アクション名となります。 ところが管理画面などはadmin/コントローラー名/アクション名などと変則的なURLにしたいことも多いでしょう …

no image

cake3でのバッチスクリプト

以前、cakeでのバッチをこちらのエントリーで書きましたが、今回は3系でのバッチの書き方について。 といってもほとんど同じですが・・・ Contents1 ディレクトリ2 ソース ディレクトリ src …