Аякс аутентификации Laravel 5

-2

Мне нужно создать auth с любых страниц через ajax. Если я пришлю неправильный логин и пустой проход (или наоборот), будут возвращены ошибки json (это нормально). Если я пришлю неправильный логин и неверный пароль (или правильный логин и путь), будет перенаправлен возврат.

Как изменить backend для получения ответа json?

мой код интерфейса js:

$("#authform").submit(function(e) {
    e.preventDefault();

    $.post($(this).attr("action"), $(this).serialize(), function(data) {
        console.log(data);
    }, "json");
});

HTML:

<form id="authform" method="POST" action="{{ url('/auth/login') }}">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="email" name="email" value="{{ old('email') }}">
    <input type="password" name="password">
    <input type="checkbox" name="remember">
    <button type="submit">Login</button>
</form>

routes.php:

Route::post('auth/login', 'Auth\AuthController@postLogin');
  • 0
    Сначала опубликуйте ваш пример кода. Чтобы мы могли легко помочь ...
  • 0
    добавлено. может быть есть пример для аутентификации ajax? я не нашел
Показать ещё 1 комментарий
Теги:
login

2 ответа

0

Я уверен, что есть лучшее решение этой проблемы, но я сделал следующее:

  1. Создайте новый маршрут для входа в Route::post('/login', 'Auth\AuthController@signIn');
  2. В App\Http\Controllers\Auth\AuthController я добавил два новых метода:

    public function signIn(Request $request) {
        $this->validateLogin($request);
    
        $throttles = $this->isUsingThrottlesLoginsTrait();
    
        if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);
    
            return $this->sendLockoutResponse($request);
        }
    
        $credentials = $this->getCredentials($request);
    
        if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
            return $this->handleUserWasAuthenticated($request, $throttles);
        }
    
        if ($throttles && ! $lockedOut) {
            $this->incrementLoginAttempts($request);
        }
    
        return $this->sendFailedLoginResponseJSON($request);
    }
    

А ТАКЖЕ

    protected function sendFailedLoginResponseJSON(Request $request)
    {
       return response()->json(['username' => $this->getFailedLoginMessage()], 422);
    }

Он в основном такой же, как метод входа в систему из AuthenticatesAndRegistersUsers, за исключением последней строки, метод входа использует

protected function sendFailedLoginResponse(Request $request)
{
    return redirect()->back()
        ->withInput($request->only($this->loginUsername(), 'remember'))
        ->withErrors([
            $this->loginUsername() => $this->getFailedLoginMessage(),
        ]);
}

который отправляет обратно перенаправление с ошибкой.

Если вы хотите как ajax, так и не-ajax, вы можете сделать

        if($request->ajax()){
            return $this->sendFailedLoginResponseJSON($request);
        }
        return $this->sendFailedLoginResponse($request);

в новом методе знака.

0

Это не ответ. Сначала попробуйте это, тогда мы должны

$('#authform').on('submit',function(e) {
e.preventDefault();
$.ajax({
    type: 'POST',
    cache: false,
    dataType: 'JSON',
    url: $(#authform).attr("action"),
    data: $('#authform').serialize(),
    success: function(data) {
        console.log(data);
    },
});
return false;
});

И вы пробовали эту ссылку Как создать логин AJAX с Laravel

Ещё вопросы

Сообщество Overcoder
Наверх
Меню