- Laravel + Vue.jsでの個人サービス開発
- 環境を下記を参考に実装する
- https://qiita.com/fruitriin/items/e0f2c9aa035c3ff2c874
- 日報サービス(CRUD
- 家計簿サービス(Line経由で入力
- Laravel
- 仕組みの把握
- 簡易版として実装してみる
- テストコードを書く
- GraphQLを使ってみる
- Gitの理解を深める
- アーキテクチャの使いどころを把握
-
-
Save bz0/c2b91a5275608aae3bc214ad5a24d6e8 to your computer and use it in GitHub Desktop.
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
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/
vue + bootstrap
# npm install vue bootstrap-vue bootstrap --no-bin-links
タスク
- 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/
参考:
https://qiita.com/fruitriin/items/e0f2c9aa035c3ff2c874
Laravel + Vueの開発環境(docker-compose):
https://github.com/bz0/docker-laravel-vue
「--no-bin-links」はwindowsだとパスが長すぎてシンボリックリンクが生成できずにエラーになる為設定する
https://qiita.com/hekizi/items/1ea005af27f94dc50ff6
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