Skip to content

Instantly share code, notes, and snippets.

@bz0
Last active December 26, 2019 06:47
Show Gist options
  • Save bz0/c2b91a5275608aae3bc214ad5a24d6e8 to your computer and use it in GitHub Desktop.
Save bz0/c2b91a5275608aae3bc214ad5a24d6e8 to your computer and use it in GitHub Desktop.

やること

@bz0
Copy link
Author

bz0 commented Dec 6, 2019

参考:
https://qiita.com/fruitriin/items/e0f2c9aa035c3ff2c874

Laravel + Vueの開発環境(docker-compose):
https://github.com/bz0/docker-laravel-vue

# docker-compose up -d
# docker-compose exec app bash
# cd /var/www/html/
# composer create-project --prefer-dist laravel/laravel nippou
# cd nippou
# npm install --no-bin-links
# composer require laravel/ui

「--no-bin-links」はwindowsだとパスが長すぎてシンボリックリンクが生成できずにエラーになる為設定する
https://qiita.com/hekizi/items/1ea005af27f94dc50ff6

# npm run hot

> @ hot /var/www/html/nippou
> cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js

sh: cross-env: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! @ hot: `cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the @ hot script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-12-06T08_05_15_043Z-debug.log

package.json内のcross-envを、cross-env.jsのパスに変えると正常動作する
https://qiita.com/Yorinton/items/fd9dae33c6748abcdfbc

「# npm install --no-bin-links」で「getaddrinfo EAI_AGAIN」のエラーが出た場合はDNSの設定の問題の為
下記変更を行い、再度npm installを行います。
https://qiita.com/bz0/items/7d4bac34c6cdada59b94

@bz0
Copy link
Author

bz0 commented Dec 10, 2019

Laravel 認証

github OAuthをlaravel/socialiteを利用して実装する
https://readouble.com/laravel/6.x/ja/socialite.html

GitHub API v3 の Scopes と Scope 一覧:
https://qiita.com/KEINOS/items/216d138b0fdf994b9582

GitHubのユーザ情報:
https://developer.github.com/enterprise/2.4/v3/users/#get-a-single-user

Nginx

Nginxの設定(ホーム以外だと404になる為):

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

https://laravel.com/docs/5.8/installation#web-server-configuration

@bz0
Copy link
Author

bz0 commented Dec 11, 2019

remember_token

  • ログイン情報を記憶しておく際に保存するcookie情報の一部
  • ログイン時に、アプリケーションで"remember me"を選んだユーザーのトークンを保存しておくカラムとして使用

User::create($attributes);

ユーザ登録時に実行されるcreateメソッド:
App¥Http¥Controller¥Auth¥RegisterController.php
項目の追加等の修正は、createメソッド内を修正する

Auth::login

  • ファサードを利用している
  • __callStatic(アクセス不能メソッド)を呼び出したときに実行される
  • サービスコンテナに登録されてる「auth」インスタンスを利用している
  • 実体の処理はどこ?
    https://nobuhiroharada.com/2018/06/13/laravel-facade-process/

認証

https://php-junkie.net/framework/laravel/socialite/#8

use Illuminate\Support\Facades\Auth;
use App\User;

class LoginController extends Controller
{
    /**
     * OAuth認証の結果受け取り
     *
     * @param str $provider
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback($provider)
    {
        try {
            $providerUser = \Socialite::with($provider)->user();
        } catch(\Exception $e) {
            return redirect('/login')->with('oauth_error', '予期せぬエラーが発生しました');
        }

        if ($email = $providerUser->getEmail()) {
            Auth::login(User::firstOrCreate([
                'email' => $email
            ], [
                'name' => $providerUser->getName()
            ]));

            return redirect($this->redirectTo);
        } else {
            return redirect('/login')->with('oauth_error', 'メールアドレスが取得できませんでした');
        }
    }
}

セッションIDで認証状態をチェックする:
https://qiita.com/pinekta/items/d10c8374b1a3003cd952

認証の独自実装:
slideshare.net/nodat/laravel-67450545
① config/auth.phpにGuardとProviderの設定を追加
②認証する対象モデルに対してAuthenticatableのインターフェイスを 適用&Authenticatableを実装したトレイトを組み込み
③Guardに対応するログイン・ログアウトをControllerに実装
④auth middleware を拡張

app/Http/kernel.php:
実際にリクエストが処理される前に行う必要のあるタスクを定義している
https://readouble.com/laravel/6.x/ja/lifecycle.html
https://qiita.com/A_zara/items/6d15777870a43111d8ec

Debugar

ブラウザ下にDebugarの情報パネルが表示され、実行したLaravelの様々な情報を見ることができる
https://www.larajapan.com/2016/02/12/%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc%ef%bc%88%ef%bc%91%ef%bc%93%ef%bc%89debugbar/

@bz0
Copy link
Author

bz0 commented Dec 25, 2019

vue + bootstrap

# npm install vue bootstrap-vue bootstrap --no-bin-links

@bz0
Copy link
Author

bz0 commented Dec 26, 2019

タスク

  • laravel + vue + phpmyadminのdocker-compose環境を作りたい
  • laravelのauth:login,auth:userの挙動を知りたい
    • セッションはどう生成されているのか?

docker環境

問題

laravel + nginx + phpmyadmin/phpmyadmin(docker)だと、webサーバ(nginx)とphpmyadmin/phpmyadminのwebサーバ(apache)が競合してしまう
https://github.com/bz0/docker-laravel-vue

対策

lorisleiva/laravel-dockerとphpmyadmin/phpmyadminを利用する
https://crieit.net/posts/Docker-Laravel
https://hub.docker.com/r/lorisleiva/laravel-docker/dockerfile

phpmyadminがlocalhost:8001で接続できなかったので
Kitematic(alpha)で設定を確認すると「192.168.99.100:8001」で接続できるよう
http://192.168.99.100:8001/

webサーバについて

php:7.3-alpineを利用している
これの実体(DockerFile)はどこにある?
webサーバは何を利用している?

  • ビルトインサーバ(php artisan serve)を利用している
  • phpmyadmin/phpmyadminはapacheを利用している

エラー対応

ERROR: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: read udp 10.0.2.15:50476->10.0.2.3:53: i/o timeout
DNSの解決ができないエラーが起きている
https://qiita.com/tk555/items/23bb5d3d5b613a03ca2b

# docker-machine ssh default
# sudo vi /etc/resolv.conf
nameserver 8.8.8.8

やりたいこと

  • oauthによる認証/セッション
  • APIによるビューとの切り離し
  • CRUD機能

http://fresh-engineer.hatenablog.com/entry/2018/01/10/020821#Laravel%E3%81%A7%E5%AE%9F%E8%A3%85

Vueを利用する
https://crieit.net/posts/Laravel-6-Vue-js-React

# composer require laravel/ui --dev
# npm install --no-bin-links
# composer require laravel/socialite
# php artisan make:model GithubUsers

認証チェック(継続ログインは、
Auth::attempt($credentials,$remember)

Laravelの認証/認可。Auth,Gate,Policyの再整理
https://codechord.com/2018/12/laravel_auth_gate_policy/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment