「「ログイン情報を保持する」の機能が実装されておりません。」

このコミットが含まれているのは:
守矢諏訪子 2022-01-17 14:36:16 +09:00
コミット cb24245247
4個のファイルの変更41行の追加8行の削除

ファイルの表示

@ -10,6 +10,18 @@ use Illuminate\Http\Request;
// use App\Models\LoginLimits;
trait AuthenticationTrait {
private function makeSession ($guard, $db) {
if (!session()->has($guard)) {
// 認証されたデータのpasswordとremember_token以外を把握する
unset($db['password']);
unset($db['remember_token']);
// セッションに保存する
session()->put($guard, $db);
}
return $db;
}
public function login (Request $r) {
// if (null === $r->server('HTTP_USER_AGENT')) {
// return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']];
@ -24,6 +36,15 @@ trait AuthenticationTrait {
// }
// }
if (isset($_COOKIE['remember_token']) && !is_null($_COOKIE['remember_token'])) { // クッキーがある場合
if (null === ($get = $this->getModel()->where('remember_token', $_COOKIE['remember_token'])->first())) { // トークンがある場合
// セッションを想像する
$login_user_datum = $this->makeSession($this->getGuard(), $get->toArray());
return ['status_code' => 200, 'params' => ['id' => $login_user_datum['id']]];
}
}
if ($this->getGuard() == 'children') {
Validator::extend('tel_size', function ($attribute, $value, $params, $validator) {
return $this->telsize($value);
@ -66,13 +87,15 @@ trait AuthenticationTrait {
if (Session::has('admins')) Session::forget('admins');
// セッションを想像する
$guard = $this->getGuard();
if (!$r->session()->has($guard)) {
// 認証されたデータのpassword以外を把握する
$login_user_datum = $get->toArray();
unset($login_user_datum['password']);
// セッションに保存する
$r->session()->put($guard, $login_user_datum);
$login_user_datum = $this->makeSession($this->getGuard(), $get->toArray());
if ($r->remember_token) {
$token = bin2hex(random_bytes(24));
try {
$this->getGuard()->where('id', $login_user_datum['id'])->update(['remember_token' => $token]);
setcookie('remember_token', $token, time()+157788000, '/', $_SERVER['HTTP_HOST'], 0, 1);
}
}
return ['status_code' => 200, 'params' => ['id' => $login_user_datum['id']]];
@ -80,7 +103,14 @@ trait AuthenticationTrait {
public function logout () {
// セッションを破壊すると、ログイン画面に移転する。
Session::forget($this->getGuard());
$guard = $this->getGuard();
if (null !== $rem = $this->getModel()->select('remember_token')->where('id', Session::get()['id'])->first()) {
$this->getModel()->where('id', Session::get()['id'])->update(['remember_token' => null]);
unset($_COOKIE['remember_token']);
setcookie('remember_token', '', time() - 3600, '/', $_SERVER['HTTP_HOST'], 0, 1);
}
Session::forget($guard);
return redirect(request()->route()->action['prefix'].'/login');
}

ファイルの表示

@ -17,6 +17,7 @@ class CreateAdminsTable extends Migration
$table->id();
$table->string('email', 72)->unique();
$table->string('password', 72);
$table->string('remember_token', 255)->nullable();
$table->timestamps();
});
}

ファイルの表示

@ -17,6 +17,7 @@ class CreateFathersTable extends Migration
$table->id();
$table->string('email', 255)->unique();
$table->string('password', 72);
$table->string('remember_token', 255)->nullable();
$table->string('company', 100);
$table->string('image', 100)->nullable();
$table->string('profile', 1000)->nullable();

ファイルの表示

@ -19,6 +19,7 @@ class CreateChildrenTable extends Migration
$table->string('email', 72)->unique();
$table->string('tel', 11)->unique();
$table->string('password', 255);
$table->string('remember_token', 255)->nullable();
$table->string('last_name', 100);
$table->string('first_name', 100);
$table->string('image', 100)->nullable();