Как показать пользовательскую проверку логина в Laravel - PullRequest
0 голосов
/ 04 мая 2019

Как показать пользовательскую проверку на странице входа.У меня есть тип пользователей.Если конкретный тип пользователя не входит в систему, отображается сообщение об ошибке.У меня есть форма входа, в которой пользователю с определенным типом разрешено входить в систему. Например, если разрешено входить в систему subscriber типу. Если другой пользователь типа user пытается войти в систему, должно отображаться сообщение об ошибке толькоподписчикам разрешено входить в систему.

protected function validateLogin(Request $request)
{
    $request->validate([
        $this->username() => 'required|string',
        'password' => 'required|string',
        'type' => new TypeRule
    ]);
}

TypeRule

class TypeRule implements Rule
{
    public function passes($attribute, $value)
    {
        return $value === 'subscriber' || $value === 'admin';
    }

    public function message()
    {
        return ':attribute subsciber is allowed to login';
    }
}

В настоящее время правила не соответствуют требуемым.Сообщения об ошибках не отображаются, если адрес электронной почты или пароль не введены.

1 Ответ

0 голосов
/ 06 мая 2019

Чтобы ответить на ваш вопрос прямо сейчас, я сначала взгляну на ваше первое правило проверки.Не видя вашу форму, я предполагаю, что у вас есть поле с именем username.То, что вы делаете в настоящее время, это заполнение значения username вместо предоставления имени поля.Попробуйте изменить свой запрос следующим образом:

protected function validateLogin(Request $request)
{
    $request->validate([
        'username' => 'required|string',
        'password' => 'required|string',
        'type' => new TypeRule
    ]);
}

Чтобы погрузиться немного глубже, является ли поле type скрытым полем, передаваемым в форме?Если это так, это представляет потенциальный недостаток безопасности.Я мог бы легко открыть Dev Tools и переключить поле типа на то, что я хотел.Я хотел бы рассмотреть подход к этому, вместо этого сделать промежуточное программное обеспечение по защищенным маршрутам.В этом промежуточном программном обеспечении вы можете проверить тип пользователя - вместо того, чтобы включать его в проверку

Сначала удалите тип из проверки:

protected function validateLogin(Request $request)
{
    $request->validate([
        'username' => 'required|string',
        'password' => 'required|string'
    ]);

    if (auth()->attempt(['email' => $request->input('username'), 'password' => $request->input('password')])) {
        return redirect('/dashboard');
    }

    return redirect()->back();
}

Затем создайте новое промежуточное ПО, запустивследующая команда:

$ php artisan make:middleware IsSubscriber

Теперь откройте файл, созданный в app/Http/Middleware/IsSubscriber.php, и добавьте проверку, чтобы проверить, относится ли текущий аутентифицированный пользователь к типу subscriber

namespace App\Http\Middleware;

use Closure;

class IsSubscriber
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (auth()->user()->type !== 'subscriber') {
            return abort(403, 'The user is not a subscriber, therefore cannot log in.');
        }
        return $next($request);
    }
}

Затем вам нужно будет зарегистрировать промежуточное программное обеспечение в вашем файле App\Http\Kernel.php:

protected $routeMiddleware = [
    'subscriber' => App\Http\Middleware\IsSubscriber::class,
];

И, наконец, добавить промежуточное программное обеспечение в ваш файл маршрутов web.php - я собираюсь предположить несколько простых маршрутов:

Route::group(['middleware' => ['subscriber']], function(){

    Route::get('/dashboard', function () {
        return view('dashboard');
    });

});

Не забудьте запустить:

$ composer dump-autoload
$ php artisan optimize:clear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...