今回は、Laravelを用いたログインの実装について進めたいと思います。
[環境]
- PHP 7.0.9
- Laravel 5.4.15
- MariaDB 10.1.21
[手順]
- 新規Laravelプロジェクトの作成(「logintest」という名前で作成しています)
- DBの準備 使用するDBについて準備しておきます。
- LaravelプロジェクトのDB設定 Laravelプロジェクト、.envファイルのDB設定を変更しておきます。
- migrateファイルの確認 Laravelでは、新しくプロジェクトを作成した時点でユーザ用のmigrateファイルができています。
- 試しにmigrate migrateファイルからmigrateを実行するには、下記のコマンドを実行します。
- AppServiceProvider.phpに設定追加 対策としては、「./app/Providers/AppServiceProvider.php」に設定を追加します。
- 再度migrate いけるはず。
- Laravelのmake:auth機能でログイン機能の作成 Laravel 5.2からはmake:authってのが使えるようなので、それ使います。
- Routeの確認 なにやらいっぱいRouteができてるのが確認できます。
- 試しにログイン http://localhost/registerへアクセスすると・・・、ユーザ作成が可能です。
$ composer create-project laravel/laravel logintest
laradockでデフォルトで環境構築した場合は、rootユーザ(パスワード:root)、
もしくは、homestead(パスワード:secret)が使えます。
laradockでmariadbを構築した場合は、まずmariadbコンテナに入ります。
$ docker exec -it laradock_mariadb_1 /bin/bash
mariadbへログイン。
# mysql -h localhost -uroot -proot
ログイン後、適当にDBを作成します。
MariaDB [(none)]> CREATE DATABASE logintest;
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=logintest
DB_USERNAME=root
DB_PASSWORD=root
laradockで環境を作った場合は、DB_HOSTをmariadbにしておきます。DB_USERNAMEとDB_PASSWORDは2で使用したユーザ/パスワードを使用。
・./database/migrations/2014_10_12_000000_create_users_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
・./database/migrations/2014_10_12_100000_create_password_resets_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token')->index();
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
ユーザやパスワードリセットの設定が入っています。とりあえず、このまま使うことにして、DBに反映させてみます。
(laradockで環境構築した場合は、workspaceコンテナから実行)
# php artisan migrate
結果、エラー。。
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key
length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key
length is 767 bytes
Laravel5.4から絵文字対応でutf8mb4サポートしたことで、mariaDBか古いバージョンのMySQLで引っかかるらしいです。https://laravel-news.com/laravel-5-4-key-too-long-error
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
(以下省略)
(laradockで環境構築した場合は、workspaceコンテナから実行)
# php artisan make:auth
Authentication scaffolding generated successfully.
# php artisan route:list
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
実はこれでできています。ログイン画面に行って(http://localhost/login)、ログインID/パスワードを入力。
ログインできることが確認できます。
ほぼ、コードを書かずにユーザ登録、ログイン、パスワードリセットができてしまいました・・。
とても便利ですね。
最近だと、クライアントサイドはJavascriptに任せて、サーバ側はAPIを提供するのみ、となっているパターンも多いので、次回はAPIの使用を検討してみたいと思います。
Lucky 12 Casino - MapyRO
返信削除Play the exciting Lucky 12 Casino in Slots, Blackjack, Roulette, Video Poker 의정부 출장마사지 and live dealer 광명 출장안마 games. Discover 의왕 출장샵 the 포천 출장마사지 Casino. Rating: 4 · 7 votes · Price range: 서울특별 출장안마 $