Laravel標準ログインのコマンドは下記外部サイトを参照
https://qiita.com/mikaku/items/038e7c6180acd06b885d
shop_administratosテーブルマイグレーションファイル
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateShopAdministrators extends Migration { const TABLE = 'shop_administrators'; /** * Run the migrations. * * @return void */ public function up() { if (Schema::hasTable(self::TABLE)) { return; } Schema::create(self::TABLE, function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('shop_id')->unsigned(); $table->string('mail_address')->comment('メールアドレス'); $table->string('password')->comment('パスワード'); $table->timestamps(); $table->foreign('shop_id') ->references('id') ->on('shops') ->onDelete('cascade'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists(self::TABLE); } }
SAMPLE/LoginController.php
<?php namespace App\Http\Controllers\SAMPLE; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Foundation\Auth\AuthenticatesUsers; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * ログインロック仕様 * * 試行回数 3回 * ロック時間 3分 */ protected $maxAttempts = 3; protected $decayMinutes = 3; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest-shop')->except('logout'); } /** * Get the login username to be used by the controller. * * @return string */ public function username() { return 'mail_address'; } protected function guard() { return Auth::guard('shop'); } protected function validateLogin(Request $request) { $this->validate($request, [ $this->username() => 'required|string', 'password' => 'required|string' ]); } protected function credentials(Request $request) { return $request->only($this->username(), 'password'); } /** * Show the application's login form. * * @return \Illuminate\Http\Response */ public function showLoginForm() { return view('SAMPLE.login.index'); } /** * @override */ protected function sendLoginResponse(Request $request) { $request->session()->regenerate(); $this->clearLoginAttempts($request); return $this->authenticated($request, $this->guard()->user()); } /** * @override */ protected function authenticated(Request $request, $user) { unset($user['password']); $user->last_authenticated_at = \Carbon\Carbon::now(); $user->save(); return $user; } /** * @override */ public function logout(Request $request) { $this->guard()->logout(); $request->session()->invalidate(); return redirect('/console/shop/'); } }
App\Entities\ShopAdministrator
<?php namespace App\Entities; use Illuminate\Database\Eloquent\Model; use Prettus\Repository\Contracts\Transformable; use Prettus\Repository\Traits\TransformableTrait; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Auth\Authenticatable as AuthenticableTrait; class ShopAdministrator extends Model implements Transformable, Authenticatable { use TransformableTrait, AuthenticableTrait; protected $table = 'shop_administrators'; protected $guarded = [ 'id' ]; public function getRememberTokenName() { return null; // not supported } /** * sessionに認証情報を持つためremember_tokenを利用していないが、 * logout時にフレームワークの仕様上、必ず更新がかかる。 * そのためremember_tokenのキーを除外することで回避する。 * @see https://stackoverflow.com/questions/43467328/laravel-5-authentication-without-remember-token * @see https://laravel.io/forum/05-21-2014-how-to-disable-remember-token * @param string $key * @param mixed $value * @return $this|void */ public function setAttribute($key, $value) { $is_remember_token_attribute = $key == $this->getRememberTokenName(); if (!$is_remember_token_attribute) { parent::setAttribute($key, $value); } } public function shop() { return $this->belongsTo('App\Entities\Shop'); } }
config/auth.php
<?php return [ /* |-------------------------------------------------------------------------- | Authentication Defaults |-------------------------------------------------------------------------- | | This option controls the default authentication "guard" and password | reset options for your application. You may change these defaults | as required, but they're a perfect start for most applications. | */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you | here which uses session storage and the Eloquent user provider. | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | Supported: "session", "token" | */ 'guards' => [ 'excm' => [ 'driver' => 'session', 'provider' => 'shop_administrators', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], /* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | If you have multiple user tables or models you may configure multiple | sources which represent each model / table. These sources may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" | */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'shop_administrators' => [ 'driver' => 'eloquent', 'model' => App\Entities\ShopAdministrator::class, ], /* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ];
app/Http/Kernel.php
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; use App\Http\Middleware\UA\SetLocale; use App\Http\Middleware\UA\ResponseJsonFormatter; class Kernel extends HttpKernel { ・・・ /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'service-auth' => \App\Http\Middleware\ServiceAuthenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'guest-excm' => \App\Http\Middleware\RedirectShopAuthenticated::class, ←●追加 ・・・ ]; }
ログイン後のホーム画面へのリダイレクト先定義
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class RedirectShopAuthenticated { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return redirect('/shop/shop-home'); } return $next($request); } }
/shop/shop-homeがログイン後のhomeとなる