(メモ) Laravel 5入門 (認証、メール送信)

ubuntu 17.04 にて実施

## 準備

```bash:パッケージインストール
sudo apt install -y \
 composer \
 \
 php-zip \
 php-mbstring \
 php-codecoverage \
 phpunit \
 \
 php-mysql \
 mysql-server
```

```bash:~/.config/composer/vendor/以下にlaravelインストール
composer global require "laravel/installer"
```

```bash:雛形作成(48MBほど生成)
laravel new blog
```

```bash:port8000でlisten
php artisan serve

# もしくは
php -S 127.0.0.1:8000 -t 'public/'
```

```bash:database作成(.envにてid/pass指定)
mysql -uroot -proot

create database homestead;
GRANT ALL PRIVILEGES ON homestead.* TO homestead@localhost IDENTIFIED BY 'secret' WITH GRANT OPTION;
```

## 認証

* [認証 5.4 Laravel](https://readouble.com/laravel/5.4/ja/authentication.html)

```
php artisan make:auth
php artisan migrate
```

* トップページ
    * ./resources/views/welcome.blade.php

![スクリーンショット_2017-08-15_15-39-47.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b234357e-a751-8371-7b68-ebc61b47f775.png)

* ユーザー登録
    * ./app/Http/Controllers/Auth/RegisterController.php
    * ./resources/views/auth/register.blade.php

![reg.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8647281e-b65a-5374-9159-53f458700d0a.png)

* ログイン後
    * ./app/Http/Controllers/HomeController.php
    * ./resources/views/home.blade.php

![home.png](https://qiita-image-store.s3.amazonaws.com/0/25728/04998f64-2217-8f37-11a4-7139217c55a3.png)

## メール

* [メール 5.4 Laravel](https://readouble.com/laravel/5.4/ja/mail.html)

```
composer require guzzlehttp/guzzle

php artisan make:mail OrderShipped
```

* ./config/mail.php
* ./app/Mail/OrderShipped.php

`./vendor/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php` も参考になる。

## デプロイ方法

* composeコマンドは無くても動く
* /srv/blog/ に設置する場合

```bash:mod_rewrite
cd /etc/apache2/mods-enabled
ln -s ../mods-available/rewrite.load .
```

```apache:/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>

	ServerAdmin webmaster@localhost

	DocumentRoot /srv/blog/public
	<Directory /srv/blog>
		AllowOverride All
		Require all granted
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
```

* ログ出力設定

```diff:/etc/php/7.0/apache2/php.ini
+ error_log = /var/log/php_errors.log
```

```bash:ログ出力
touch /var/log/php_errors.log
chown www-data:www-data /var/log/php_errors.log

service apache2 restart
```

```bash:migrate
php artisan migrate
```

```bash:.envを書き換えた場合
php artisan config:cache
```

## 動作確認

* ユーザー登録
* ログイン
* パスワードリセットのメール送信
        * メール中のリセットボタンでリセットできること

![reset.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a880a52d-21c9-1ecf-4faa-642f67b29bc3.png)


----

## 雑記

### 認証その2

* [Laravelの認証機能でログイン/ユーザ登録/パスワードリセットなどの管理画面を一撃構築する（基本＆入門編）](https://www.ritolab.com/entry/51)

```sh
laravel new login1

create database sample;

laravel/.env
	DB_DATABASE=sample
	DB_USERNAME=your_username
	DB_PASSWORD=your_password


php artisan migrate

# コマンドで認証に必要となるルート定義とビューを生成する
php artisan make:auth

php artisan serve
```

```apache:/etc/apache2/sites-enabled/000-default.conf
(略)
DocumentRoot /www/login1/public
<Directory "/www/login1/public">
        Options All
        AllowOverride All
        Require all granted
</Directory>
(略)
```

```
sudo systemctl restart apache2
```

### Basic認証

* 参考
* [Basic認証](https://www.ritolab.com/entry/3)
* [l5-very-basic-auth/README.jp.md at master · olssonm/l5-very-basic-auth](https://github.com/olssonm/l5-very-basic-auth/blob/master/README.jp.md)

```sh
composer require olssonm/l5-very-basic-auth:5.*

# 設定ファイルの公開
php artisan vendor:publish \
 --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"
```

* config/very_basic_auth.php (id:pass)

* routes/web.php (basic認証を利用するページの設定)

```
Route::group(['middleware' => 'auth.very_basic'], function() {
    Route::get('/', function () { return view('welcome'); });
});
```

### filesystemを使う (s3など)

* config/filesystems.php

```
php artisan storage:link
```

### DBのバックアップ

```
php artisan make:command BackupDatabaseCommand --command="command:backupdb"

vim ./app/Console/Commands/BackupDatabaseCommand.php

# backup実施
php artisan command:backupdb
```


### migration (カラムの追加/削除)

```
# マイグレーション生成
#php artisan make:migration create_books_table --create=books
php artisan make:migration add_users_table
```

* database/migrations/2018_09_05_100800_add_users_table.php

```diff
    public function up()
    {
+       Schema::table('users', function (Blueprint $table) {
+               $table->text('hoge1'); // INT
+       });
    }
    public function down()
    {
+       Schema::table('users', function (Blueprint $table) {
+               $table->dropColumn('hoge1');
+       });
    }
```

```
php artisan migrate
```

* https://readouble.com/laravel/5.6/ja/migrations.html

```
php artisan migrate:rollback --step=1
```

### Seeder

```sh
php artisan make:seeder UsersTableSeeder

vim database/seeds/*Seeder.php

php artisan db:seed
```

```sh:migrationの場合
# 全データー削除してから登録したい場合
php artisan migrate:refresh --seed

# 初回の場合
php artisan migrate --seed
```

* 大量のダミーデーター生成には Faker ライブラリを使うのが良い。


### Laravelのバージョンアップ

```sh
# バージョン確認
php artisan --version

# バージョン指定の修正
vim composer.json

# アップグレード
composer update

# キャッシュをクリア
php artisan cache:clear
```

### SNSソーシャルログイン

```
composer require laravel/socialite
```

### Vue.js

* [Vue.js のチュートリアルをLaravel＆Docker環境で行う - イノベーション　エンジニアブログ](http://tech.innovation.co.jp/2018/01/05/carry-out-tutorial-on-Laravel-amp-Docker.html)

* 編集するファイル
    * routes/web.php
    * resources/views/app.blade.php
    * resources/js/app.js

```php:routes/web.php
// どのアクセスからでも app に渡す
Route::get('/{any}', function () {
    return view('app');
})->where('any', '.*');
```

```sh
npm install

# resources/js/app.js => public/js/app.js に更新
npm run watch-poll
```

```sh
# public/js/app.js が巨大なため縮小する (1.3mb->330kb程度になる)
npm run production
```