2016-11-17 3 views
0

Я могу войти в систему с помощью Ajax в Laravel 5.3Laravel 5,3 Ajax Войти Настроить учетные данные

Это легко достигается путем создания запроса на пост входа маршрута с соответствующими параметрами.

Однако для моего приложения, я проектирование два способа для пользователя, чтобы войти в системе, - с помощью традиционной электронной почты/пароль комбинацию, которая Laravel уже поддерживает, и с помощью кодадоступа, который будет распространяться и позволить обладателю указанного кода войти в систему без сочетания электронной почты и пароля. В моем приложении нет «регистрации», есть только разные уровни аутентификации.

Во всяком случае, в /vendor/laravel/framework/src/Illuminate/Foundation/Auth я редактированием AuthenticatesUsers.php и понять, что эта функция специально обрабатывает попытки входа в систему:

protected function attemptLogin(Request $request) 
    { 
     return $this->guard()->attempt(
      $this->credentials($request), $request->has('remember') 
     ); 
    } 

Мой вопрос, как я могу изменить успех attempt() на основе содержания запроса ?

Другими словами, если кто-то отправляет код доступа ajax, он не должен быть протестирован против комбинации электронной почты и пароля, поскольку он, очевидно, потерпит неудачу. Аналогично, если они отправляют ajax с параметрами электронной почты/пароля, его не следует тестировать по списку доступных кодов доступа.

Есть ли я на правильном пути? Где в Laravel я могу пойти, чтобы сделать контингент Auth::attempt() по запросу?

+0

Я бы не советовал редактировать файл фреймворка. Существует полный раздел для ручной аутентификации пользователя без документации https://laravel.com/docs/5.2/authentication#authenticating-users. Также, чтобы проверить ваши вызовы ajax, посмотрите номер строки '38' в' middleware/Authenticate.php', который должен дать вам некоторую идею. –

ответ

0

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

public function handle($request, Closure $next) 
{ 
    // check if the request has access_code 
    $request->attributes->add(['using_access_code' => $request->has('access_code')]); 
    return $next($request); 
} 

И в контроллере, вы можете проверить наличие положительного теста по этому параметру запроса, который мы недавно добавленным (вы, конечно, можете сделать это внутри контроллера непосредственно, но я лично, как связующее ПО справиться с этим, потому что есть вероятность, что вы можете захотеть добавить больше функциональных возможностей)

в контроллере, если using_access_code ложно, заполните attempt() логин, иначе, извлечения пользователя с помощью access_code и вручную аутентификации пользователя с помощью Auth::login($user). Дайте мне знать, если вы неясны.

+0

Я не очень хорошо знаком с решениями среднего класса. Есть ли альтернатива? –

Смежные вопросы