0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第7回】

Last updated at Posted at 2020-10-09

#制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code

#関連記事

Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第1回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第2回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第3回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第4回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第5回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第6回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【最終回】

#はじめに
この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。

記事を作成するにあたり、以下のサイトを参考にしています。
こちらの方が詳しいので、当方で付け加えている要件が不要であれば、以下を参考にした方がいいと思います。

長くなるので、何回かに分けて記事を投稿します。

#LoginController.phpの更新
app/Http/Controllers/Admin/Auth 内のLoginController.phpを開きます。
logincont.jpg

開いたら、内容を以下に修正します。

LoginController.php
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::ADMIN_HOME;

さらに以下を追記し、メソッドを上書きします。

LoginController.php
// この記述だけ画面のトップに
use Illuminate\Support\Facades\Auth;

    /**
     * ログインページの表示
     *
     * @return view
     */
    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    /**
     * guardメソッドの上書き
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard('admin');
    }

#ミドルウェアの修正
app/Http/Middleware 内のAuthenticate.phpを開きます。
middleware.jpg

開いたら、内容を以下のように修正します。

Authenticate.php
    /**
     * 認証されていないときにユーザーがリダイレクトされるパスを取得します。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (!$request->expectsJson()) {
            if ($request->is('admin/*')) {
                return route('admin.login');
            }
            return route('login');
        }
    }

#コントローラの修正
app/Http/Controllers/Admin 内のAdminHomeController.phpを開きます。
adminhomecont.jpg

開いたら、内容を以下に修正。

AdminHomeController.php
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin')->except('logout');
    }

次にapp/Http/Controllers/Admin/Auth 内のRegisterController.phpを開きます。
register.jpg

開いたら、内よを以下に修正。

RegisterController.php
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin');
    }

#ミドルウェアの修正
app/Http/Middleware 内のRedirectifAuthenticated.phpを開きます。
redirect.jpg

開いたら、内容を以下に修正します。

RedirectifAuthenticated.php
    /**
     * 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()->check()) {
            return redirect(RouteServiceProvider::HOME);
        }

        if (Auth::guard('admin')->check()) {
            return redirect(RouteServiceProvider::ADMIN_HOME);
        }

        return $next($request);
    }

今回は以上で終了です。
基本的な設定はここで終了ですが、当方の場合管理者はログイン機能だけを使い、新規登録やパスワードを忘れた場合の変更はホームページ上からはできないようにします。
またログインはメールアドレスではなく、ユーザー名(ユーザーID)でできるようの変更します。
次回はそちらの方を掲載します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?