質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

1069閲覧

Laravelの処理中に中断された時の対処

nonyuna

総合スコア4

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/07 19:49

編集2020/02/07 19:50

現在、ログイン時にログインした人のIPアドレスを保存するという処理を書いたのですが、これだと、処理途中で読み込み停止などをされたらDBにIPアドレスを保存しなくてもログインできてしまうのではと思い。質問させていただきました。
現状ログイン関連などはlaravel/uiで作っており、動作自体は問題なくしています。

PHP

1//LoginController 2<?php 3 4namespace App\Http\Controllers\Auth; 5use Auth; 6use Mail; 7 8use App\Http\Controllers\Controller; 9use App\Providers\RouteServiceProvider; 10use Illuminate\Foundation\Auth\AuthenticatesUsers; 11 12class LoginController extends Controller 13{ 14 15 /* 16 |-------------------------------------------------------------------------- 17 | Login Controller 18 |-------------------------------------------------------------------------- 19 | 20 | This controller handles authenticating users for the application and 21 | redirecting them to your home screen. The controller uses a trait 22 | to conveniently provide its functionality to your applications. 23 | 24 */ 25 26 use AuthenticatesUsers; 27 28 /** 29 * Where to redirect users after login. 30 * 31 * @var string 32 */ 33 protected $redirectTo = RouteServiceProvider::HOME; 34 35 /** 36 * Create a new controller instance. 37 * 38 * @return void 39 */ 40 public function __construct() 41 { 42 $this->middleware('guest')->except('logout'); 43 } 44 protected function authenticated(\Illuminate\Http\Request $request, $user) 45 { 46 $ip[] = ''; 47 $model = \App\LoginHistory::create([ 48 'user_id' => Auth::id(), 49 'ip' => encrypt($_SERVER["REMOTE_ADDR"]) 50 ]); 51 Mail::send('emails.loginhistory', $ip, function($message){ 52 $message->to(decrypt(Auth::user()->email), 'Login')->subject('ログインを確認しました。'); 53 }); 54 return redirect()->intended($this->redirectPath()); 55 } 56 public function username() 57 { 58 return 'name'; 59 } 60} 61

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ログイン状態はセッションに保存されますが、セッションのデータを書き込む処理はもっと先(\Illuminate\Session\Middleware\StartSessionミドルウェアの最後)なので、IPアドレス保存処理を行う前に処理が中断したならログイン状態を記録したセッションも保存されていないので問題ないと思います。

別のやり方としては、認証に使うガードはカスタマイズできるので(ガードのカスタマイズ, カスタムガードの追加)、\Illuminate\Auth\SessionGuardをextendしてlogin()の処理にIP保存を付け加えた自前のガードクラスを作成してそれを使うようにするとわかりやすくて安心できるかもしれません。

php

1class MySessionGuard extends SessionGuard 2{ 3 public function login(AuthenticatableContract $user, $remember = false) 4 { 5 // ここにIPアドレス保存処理を追加 6 7 parent::login($user, $remember); 8 } 9}

投稿2020/02/08 00:08

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そんな奇跡的なタイミングで読み込み停止ができれば分からないですけど、
Authの確認で、「IPが保存されているか」というのも条件にすれば良いのでは?

投稿2020/02/07 20:28

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://pentan.info/php/ignore_user_abort.html

すごい古そうな記事なので参考になるかわかりませんが参考までにおいておきます。
環境にもよると思うんですが、起動したスクリプトは接続が切られても多少の時間は走り続けると思います。

file_put_contents('log', 'Start: '.date('Y-m-d')."\n", FILE_APPEND); sleep(10); file_put_contents('log', 'End: '.date('Y-m-d')."\n", FILE_APPEND);

例えばこの様なスクリプトをおいて、途中で切断した場合でもEndが出力されるかどうか、確認してみてはどうでしょうか。


PS.
ログイン処理なら、新しいセッションIDを受け取らないと動作しない気がするので途中で切断したら
セッションが切れる気がしないでもないです

投稿2020/02/08 04:10

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問