本記事では、ブログ投稿システムを作りながらLaravelの認証機能の設定の仕方をわかりやすく解説していきます。
以下の記事の続きです。まだ読んでいない方はぜひご一読ください!
初心者の方でもLaravelの動作環境を簡単に作れるWINDIIオリジナルのソースコードを用意したので、実際に動かして学ぶとより深く理解できるようになります!
以下の記事を参考にご活用ください。
目次
Laravelの認証について
Laravelでは、以下のコマンドを打つだけでログインや新規登録、パスワードリセットに関する基本の機能や画面が一発で作成できます。
php artisan make:auth
それではさっそく打ってみましょう。
マイグレーションも念の為実行しておきます。
php artisan migrate
http://localhost:8000にアクセスしてみましょう!
右上にLogin、Registerボタンが出現しました!
それでは簡単に各画面の説明をしていきます。
ユーザ登録画面
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.phpのstore() メソッドを以下のように修正します。
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の認証に関しては終わりです?
次回はメール確認機能を実装してみましょう!

WINDII

最新記事 by WINDII (全て見る)
- Canvaが最高すぎる。使い方を完全ガイド【チュートリアルあり】 - 2019年5月14日
- 人気急上昇中のLaravelをはじめよう!【徹底解説】 - 2019年4月23日
- Laravelの認可を理解して実装してみよう! - 2019年3月29日
この記事へのコメントはありません。