プログラミング学習やフリーランスエンジニア情報を発信していきます。現役フリーランスエンジニア2人で運営してます!

  1. バックエンド

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.

riri

25歳。 Twitter:りリー@ryudoi1 フリーランスとして働きながら、WINDII(ウィンディ)ではテックメディア事業や、受託事業を行なっています! フリーランスになるまでの過程は こちら

関連記事

コメント

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

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

PAGE TOP