現役フリーランスエンジニアが運営するテックメディア。日々の業務で得た知識を発信していきます!

  1. バックエンド
  2. 1759 view

Laravelの認証機能を設定してみよう!

最終更新日:2019/04/02

本記事では、ブログ投稿システムを作りながらLaravelの認証機能の設定の仕方をわかりやすく解説していきます。

以下の記事の続きです。まだ読んでいない方はぜひご一読ください!

初心者の方でもLaravelの動作環境を簡単に作れるWINDIIオリジナルのソースコードを用意したので、実際に動かして学ぶとより深く理解できるようになります!

以下の記事を参考にご活用ください。

Laravelの認証について

Laravelでは、以下のコマンドを打つだけでログインや新規登録、パスワードリセットに関する基本の機能や画面が一発で作成できます。

php artisan make:auth

それではさっそく打ってみましょう。

マイグレーションも念の為実行しておきます。

php artisan migrate

http://localhost:8000にアクセスしてみましょう!

右上にLoginRegisterボタンが出現しました!
それでは簡単に各画面の説明をしていきます。

ユーザ登録画面

Registerボタンを押してみましょう。

登録されてリダイレクトします!

localhost:8080を開いてデータベースを見てみましょう。
usersテーブルにデータが追加されています。

ログイン画面

ひとまずログアウトします。

Loginボタンを押してログインしてみましょう。

ログインできました!

パスワードリセット画面

パスワードを忘れた人向けにパスワードリセット機能も用意されています。

Forgot Your Password?をクリックして、以下の画面に移動します。

メールを入力する前にhttp://localhost:8025でメールボックスを起動しておきましょう。

メールを送ると、メールボックスに以下のようなメールが届きます。

中身を見てみるとこうなっています。

Resetボタンをクリックすると、以下のようにパスワードリセット画面に飛ばされます。

以上で各画面の説明は終わりです。やったことはコマンドを1個打っただけなのですごく楽ですね。?

ログイン後のリダイレクト先を指定する

現在、ログイン後には/homeに飛ばされるようになっていますが、これを/articlesに変えてみましょう。

app/Http/Controllers/Auth/LoginController.phpを開いて以下を修正します。

protected $redirectTo = '/articles';

これでログインすると、ログイン後のリダイレクト先が/articlesになってますね。

新規登録後のリダイレクト画面に関しても、

app/Http/Controllers/Auth/RegisterController.php

にある、

$redirectTo

を指定すれば同様にできます!

ブログ記事の著者を保存する

現在ブログ投稿は匿名になっていますが、著者も保存することにしましょう。

articlesテーブルにカラムを追加する

まず、マイグレーションファイルを作成してarticlesテーブルにuser_id を保存することにします。

php artisan make:migration add_user_id_to_articles_table --table=articles

こんな感じでuser_id を追加するマイグレーションファイルを書きます。

database/migrations/add_user_id_to_articles_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddUserIdToArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->bigInteger('user_id')->after('content');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->dropColumn('user_id');
        });
    }
}

書き上げたらマイグレーションを実行しましょう。

php artisan migrate

http://localhost:8080を開いてデータベースを開いてみると、articlesテーブルにuser_idが追加されているのが確認できます。

著者を保存する

app/Http/Controllers/ArticleController.phpstore() メソッドを以下のように修正します。

public function store(StoreArticle $request)
{
    $article = new Article;
    $article->title = $request->title;
    $article->content = $request->content;
    $article->user_id = auth()->user()->id;
    $article->save();
    return redirect("/articles");
}

こんな感じで投稿してみましょう。

ちゃんとuser_idが保存されていますね。

ルートの保護

認証済みユーザーのみアクセスを許すというルートの保護をしてみましょう。

今回の場合では、ログインしていないユーザは新規投稿できないようにしましょう!

app/Http/Controllers/ArticleController.php に以下を追加します。

<?php

namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;
use App\Http\Requests\StoreArticle;

class ArticleController extends Controller
{
    // 追加
    public function __construct()
    {
        $this->middleware('auth')->only(['create', 'store']);
    }
    ...省略
}

create()store()に対して、認証済みでないとアクセスできないように定義しました。

この状態で新規投稿ページ(localhost:8000/articles/create)にアクセスしてみましょう。

ログイン画面にリダイレクトされます。

ログインしてみると、新規投稿画面にリダイレクトされます。

編集、削除についても同様にしましょう。

public function __construct()
{
    $this->middleware('auth')->only(
        [
          'create',
          'store',
          'edit',
          'update',
          'delete'
        ]
    );
}

これで認証ユーザ以外が新規追加、編集、削除することができなくなりました!

まとめ

以上で、Laravelの認証に関しては終わりです?

次回はメール確認機能を実装してみましょう!

The following two tabs change content below.
WINDII

WINDII

WINDII(ウィンディ)は、フリーランスエンジニアが運営するテックメディアです。 日々の業務で得た知見を、皆さんに役立つコンテンツにして発信していくので応援よろしくお願いします! また、Slackで無料コミュニティも運営しています。たくさんのエンジニアが参加していて、プログラミングの相談や雑談などをしている楽しいコミュニティなので、興味ある方はぜひお気軽にご参加ください。 Slackコミュニティはこちらから

バックエンドの最近記事

  1. 人気急上昇中のLaravelをはじめよう!【徹底解説】

  2. Laravelの認可を理解して実装してみよう!

  3. Laravelのシーティング(Seeding)機能をマスターしよう!

  4. Laravelのメール確認機能を設定してみよう!

  5. Laravelの認証機能を設定してみよう!

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP