【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ
こちらの連載記事では、LaravelとStripeを使用して企業サイト兼Eコマース(ECサイト)を作成していきます。
Laravelのプロジェクト作成からStripeの実装まで行い、最終的に単発決済・サブスクリプションの実装までを目指します。
シリーズ
【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8
ちなみにこちらの記事は、Easy E-Commerce Using Laravel and Stripeという書籍をもとに執筆しています。
今回はLaravelの認証機能をサイトに導入していきます。
データベースの作成〜マイグレート
まずは以下の流れでデータベースの作成とmigrateを行いましょう。
.env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=ecommerce //変更 DB_USERNAME=root DB_PASSWORD=
$ mysql -u root $ create database ecommerce;
コマンドラインからmigrate
$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds)
認証機能の導入
次にLaravelネイティブな認証機能を導入していきます。
$ php artisan make:auth //Auth機能の導入 $ php artisan make:migration AddUserLocation --table=users // usersテーブルにカラムを足すmigrationファイルの作成
/database/migrations/2019_08_15_221247_add_user_location.phpに以下の行を追記
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('address'); $table->string('city'); $table->string('state'); $table->string('zip'); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn(['address', 'city', 'state', 'zip']); }); }
$ php artisan migrate Migrating: 2019_08_15_221247_add_user_location Migrated: 2019_08_15_221247_add_user_location (0.01 seconds)
/resources/views/auth/register.blade.phpを開けると、ユーザー登録画面のbladeとなっているので、nameの入力Formの下(27行目あたり)に以下のコードを追記します。
<div class="form-group row"> <label for="address" class="col-md-4 col-form-label text-md-right">{{ __('Address') }}</label> <div class="col-md-6"> <input id="address" type="text" class="form-control @error('address') is-invalid @enderror" name="address" value="{{ old('address') }}" required autocomplete="address" autofocus> @error('address') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="city" class="col-md-4 col-form-label text-md-right">{{ __('City') }}</label> <div class="col-md-6"> <input id="city" type="text" class="form-control @error('city') is-invalid @enderror" name="city" value="{{ old('city') }}" required autocomplete="city" autofocus> @error('city') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="state" class="col-md-4 col-form-label text-md-right">{{ __('State') }}</label> <div class="col-md-6"> <input id="state" type="text" class="form-control @error('state') is-invalid @enderror" name="state" value="{{ old('state') }}" required autocomplete="state" autofocus> @error('state') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="zip" class="col-md-4 col-form-label text-md-right">{{ __('Zip') }}</label> <div class="col-md-6"> <input id="zip" type="text" class="form-control @error('zip') is-invalid @enderror" name="zip" value="{{ old('zip') }}" required autocomplete="zip" autofocus> @error('zip') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div>
/app/Http/Controllers/Auth/RegisterController.phpに以下を追記
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'address' => 'required', //追記 'city' => 'required', //追記 'state' => 'required', //追記 'zip' => 'required', //追記 ]); } protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'address' => $data['address'], //追記 'city' => $data['city'], //追記 'state' => $data['state'], //追記 'zip' => $data['zip'], //追記 ]); } }
また、同じく
/app/Http/Controllers/Auth/RegisterController.php
/app/Http/Controllers/Auth/LoginController.php
/app/Http/Controllers/Auth/VerificationController.php
/app/Http/Controllers/Auth/ResetPasswordController.php
/app/Http/Controllers/Auth/RegisterController.php
/app/Http/Controllers/Auth/ForgotPasswordController.php
の
protected $redirectTo = '/home'; ||> を、 >|php| protected $redirectTo = '/'; ||> に変更します。 そして、/app/Http/Middleware/RedirectIfAuthenticated.phpを以下のように変更します。 >|php| public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return redirect('/'); //変更 } return $next($request); } ||> 次に/app/User.phpに追記をします。 >|php| protected $fillable = [ 'name', 'email', 'password','address','city','state','zip' ]; ||> 最後に/routes/web.phpを開き、以下の行を削除してください。 >|php| Route::get('/home', 'HomeController@index')->name('home'); ||> ここで行なっているのは、各ユーザーの住所、市、州、および郵便番号などを認証時に入力できるようにすることです。 試しにAboutControllerに以下のコードを追加して、/aboutにアクセスしてみます。 >|php| public function __construct() { $this->middleware('auth'); } ||> 以下のような画面が表示されるはずです。 [f:id:nekorokkekun:20190816073725p:plain] 試しにユーザー登録ができるか、そして登録後にwelcome.blade.phpに遷移されるか試してみましょう。 *ログアウト処理 余談ですがログアウト処理は以下のファイルが行なっています。 /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php >|php| public function logout(Request $request) { $this->guard()->logout(); $request->session()->invalidate(); return $this->loggedOut($request) ?: redirect('/'); }
このメソッドは、すべてのセッションまたはCookieをクリアし、ユーザーをホームページにリダイレクトします。この機能は既に実装されているため、必要な作業は適切なルートを作成することだけです。
また、Laravelでユーザー認証機能(make:auth)の導入を行なった際に、自動的にパスワードリセット機能も導入されることになります。
/password/reset
でアクセスをすると/resources/views/auth/passwords/email.blade.phpが表示されます。
こちらをカスタムすることでパスワードリセット画面の外観を変えることもできます。
連載記事
【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8