はじめに
Laravelのポートフォリオ制作の過程において簡単ログイン機能の記事が少なく、(Railsの簡単ログイン機能の記事は山ほどあった。。笑)
個人的には参考にできる記事がなかったので、もしLaravelでポートフォリオ制作に おいてこの機能についてお役に立てたら幸いです。
※注意点
ポートフォリオを見て頂く方のストレスを軽減する事を優先ているため、セキュリティに関しては一切考慮していないので予めご了承ください。
開発環境
Laravel 6.18.40
PHP 7.3.11
Mysql
MacOS
ゲストユーザーデータをDBに登録する
Laravelのインストール時にデフォルトで用意されているDatabaseSeederクラスを変更。
※insertする値は自分で設定してください※
(例)
'name' => 'ゲストユーザー',
'email' => 'aaabbbccc@',
'password' => 'aaabbbccc',
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class DatabaseSeeder extends Seeder
{
/**
* データベース初期値設定の実行
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}
views
hidden属性値を使って簡単ログインボタンをサブミットします。
<form method="post" action="{{ route('login.guest') }}">
@csrf
<input type="hidden" name="email" value="登録したデータ">
<input type="hidden" name="password" value="登録したデータ">
<button type="submit" class="btn btn-primary">ユーザー簡単ログイン</button>
</form>
ルーティング
名前付きルートを指定
->name('login.guest')
Route::post('login/guest', 'Auth\LoginController@guestLogin')->name('login.guest');
コントローラー
attempt関数でviewファイルのhiddenで受け取った値を認証して、認証した場合はtrueを返します。今回であれば一般ユーザーのログイン後と同じ操作を可能としています。もし不正の値の場合はリダイレクトして元の画面に戻るようにしてあります。
<?php
namespace App\Http\Controllers\Auth;
use Auth;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function guestLogin(Request $request)
{
if(Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')])){
$articles = Article::latest()->paginate(5);
return view('articles.index', ['articles' => $articles]);
}
return redirect()->back();
}
}
最後に
冒頭でも書きましたが、セキュリティに関しては目を瞑ってください。
この実装内容は本番環境では到底で使用きませんが、柔軟に機能実装できるエンジニア脳を鍛えていきたいですね。