「ログイン時に10回失敗した際のログインロック機能が実装されておりません。」
このコミットが含まれているのは:
コミット
5233c4ca75
|
@ -8,6 +8,8 @@ use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
use App\Models\LoginLimits;
|
||||||
|
|
||||||
// use App\Models\LoginLimits;
|
// use App\Models\LoginLimits;
|
||||||
|
|
||||||
trait AuthenticationTrait {
|
trait AuthenticationTrait {
|
||||||
|
@ -24,18 +26,17 @@ trait AuthenticationTrait {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function login (Request $r) {
|
public function login (Request $r) {
|
||||||
// if (null === $r->server('HTTP_USER_AGENT')) {
|
$loginid = $this->getGuard() == 'children' ? $r->tel : $r->email;
|
||||||
// return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']];
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) {
|
if (null !== ($ll = LoginLimits::where('login_id', $loginid)->first())) {
|
||||||
// if ((time() >= strtotime($ll->updated_at) + 600) === false) {
|
if ((time() >= strtotime($ll->updated_at) + 600) === true) {
|
||||||
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete();
|
LoginLimits::where('login_id', $loginid)->delete();
|
||||||
// }
|
}
|
||||||
// if ($ll->fail_number >= 10) {
|
|
||||||
// return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']];
|
if (null !== ($ll = LoginLimits::where('login_id', $loginid)->first()) && $ll->fail_number >= 10) {
|
||||||
// }
|
return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']];
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_COOKIE['remember_token']) && !is_null($_COOKIE['remember_token'])) { // クッキーがある場合
|
if (isset($_COOKIE['remember_token']) && !is_null($_COOKIE['remember_token'])) { // クッキーがある場合
|
||||||
if (null === ($get = $this->getModel()->where('remember_token', $_COOKIE['remember_token'])->first())) { // トークンがある場合
|
if (null === ($get = $this->getModel()->where('remember_token', $_COOKIE['remember_token'])->first())) { // トークンがある場合
|
||||||
|
@ -68,17 +69,25 @@ trait AuthenticationTrait {
|
||||||
|
|
||||||
// 存在しない場合
|
// 存在しない場合
|
||||||
if (null === ($get = $this->getModel()->where($chk[0], $chk[1])->first())) {
|
if (null === ($get = $this->getModel()->where($chk[0], $chk[1])->first())) {
|
||||||
|
if (null !== ($loglim = LoginLimits::where('login_id', $loginid)->first())) {
|
||||||
|
LoginLimits::where('login_id', $loginid)->increment('fail_number');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LoginLimits::create(['login_id' => $loginid, 'fail_number' => 1]);
|
||||||
|
}
|
||||||
|
|
||||||
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
|
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
|
||||||
}
|
}
|
||||||
|
|
||||||
// パスワードが異なる場合
|
// パスワードが異なる場合
|
||||||
if (!Hash::check($r->password, $get->password)) {
|
if (!Hash::check($r->password, $get->password)) {
|
||||||
// if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) {
|
if (null !== ($loglim = LoginLimits::where('login_id', $loginid)->first())) {
|
||||||
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]);
|
LoginLimits::where('login_id', $loginid)->increment('fail_number');
|
||||||
// }
|
}
|
||||||
// else {
|
else {
|
||||||
// LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]);
|
LoginLimits::create(['login_id' => $loginid, 'fail_number' => 1]);
|
||||||
// }
|
}
|
||||||
|
|
||||||
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
|
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,5 +8,5 @@ use Illuminate\Database\Eloquent\Model;
|
||||||
class LoginLimits extends Model
|
class LoginLimits extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
protected $fillable = ['user_agent', 'fail_number'];
|
protected $fillable = ['login_id', 'fail_number'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,17 +19,9 @@ class LoginLimitsFactory extends Factory
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function definition()
|
public function definition () {
|
||||||
{
|
|
||||||
$ua = [
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.2 Chrome/87.0.4280.144 Safari/537.36', // qutebrowser
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36', // brave
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0', // firefox
|
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Goanna/4.8 Firefox/68.0 PaleMoon/29.4.1' // palemoon
|
|
||||||
];
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'user_agent' => $ua[rand(0, 3)],
|
'login_id' => $this->faker->email,
|
||||||
'fail_number' => rand(0, 10),
|
'fail_number' => rand(0, 10),
|
||||||
'created_at' => $this->faker->dateTime,
|
'created_at' => $this->faker->dateTime,
|
||||||
'updated_at' => $this->faker->dateTime,
|
'updated_at' => $this->faker->dateTime,
|
||||||
|
|
|
@ -15,7 +15,7 @@ class CreateLoginLimitsTable extends Migration
|
||||||
{
|
{
|
||||||
Schema::create('login_limits', function (Blueprint $table) {
|
Schema::create('login_limits', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->string('user_agent', 300);
|
$table->string('login_id', 255);
|
||||||
$table->unsignedInteger('fail_number');
|
$table->unsignedInteger('fail_number');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|
新しいイシューから参照