Множественная аутентификация Laravel с ложным условием - PullRequest
0 голосов
/ 27 января 2019

Я хочу сделать страницу администратора и страницу пользователя с другой таблицей и другой страницей для аутентификации при входе в систему, я уже делаю 2 модели: модель администратора и модель пользователя по умолчанию. И добавьте Guard for Admin в /config/auth.php

Это мой auth.php

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'admin' => [
      'driver' => 'session',
      'provider' => 'admin',
    ],
    'admin-api' => [
      'driver' => 'token',
      'provider' => 'admin',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],
],
'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'admin' => [
        'provider' => 'admin',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

Это моя модель администратора

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    use Notifiable;

    protected $guard = "admin";
    protected $table = 'admins';

    protected $fillable = [
        'name', 'email', 'jabatan','password'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

А это моя логика авторизации в контроллере

// Login Auth
public function auth()
{
  if (auth()->check()) {
    return redirect('/pendaftar');
  }
  else {
    if (auth()->attempt([
        'email'     => request('email'),
        'password'  => request('password')
      ]))
    {
      return redirect('/pendaftar');
    }
    else
    {
      return back()->withErrors([
        'message' => Lang::get('auth.failed')
      ]);
    }
   }
 }

Это мой маршрут: список для этого контроллера

| | POST | login-admin | |App\Http\Controllers\AdminController@auth | web  |

Проблема:

Проблема: я не могу войти, используя эту модель администратора, и всегда выкидываю ложное условие в auth()->attempt([]), даже если я жестко закодировал электронную почту и пароль. Пожалуйста, дайте мне несколько советов и что не так в моем коде.

Примечание

Я уже использую auth('admin')->attempt([]) для создания спецификации гвардии для администратора, но результат все тот же, я не могу войти.

Я уже изменяю настройки по умолчанию auth config на admin из Интернета, и результат все тот же.

Я уже изменяю драйвер провайдера защиты на database и указываю таблицу на таблицу admins в /config/auth.php, но ничего не происходит.

Я уже тестирую php thinker в cmd, чтобы получить данные, и данные доступны , но контроллер аутентификации по-прежнему выдает ложное условие.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

в вашем config/auth.php

есть небольшая орфографическая ошибка. Ваше имя охранника "admin", а имя вашего провайдера такое же, как и у вашего имени таблицы "admins"

'guards' => [
 ...

'admin' => [
      'driver' => 'session',
      'provider' => 'admins',  // replace 'admin' by 'admins'
    ],

],


'providers' => [
     ...
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],
],

 'passwords' => [
        ...

        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
0 голосов
/ 28 января 2019

Попробуйте это

ADD -> использовать Illuminate \ Http \ Request;

аутентификация публичной функции (запрос $ request)

$ credentials = только $ request-> (['email', 'password']);

Auth :: guard ('admin') -> попытка ($ учетные данные);

...