2014-09-24 3 views
0

Auth :: check() завершается после успешного завершения Auth: попытка(). Я просто следую инструкциям laracast.com, чтобы сделать простую аутентификацию. Этот конкретный учебник https://laracasts.com/series/laravel-from-scratch/episodes/15. Так что либо небольшое изменение было сделано между 4 и 5 версиями, либо им что-то не так.laravel Auth :: check() failed

Это функция, которая выполняет аутентификацию, а вторая выполняет проверку. Оба они находятся в одном классе.

public function store() 
{ 
    $credentials = Input::only('user_displayname'); 
    $credentials['password'] = Input::get('user_password'); 

    if (Auth::attempt($credentials)) 
    { 
     return Auth::user(); 
    } 

    return 'not logged'; 
} 

public function status() 
{ 
    return dd(Auth::check()); 
} 

Это модель пользователя:

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    protected $table = 'user'; 

    protected $hidden = array('user_password', 'remember_token'); 

    protected $fillable = ['user_displayname', 'user_fname', 'user_lname', 'user_email',  'user_password']; 

    public $errors; 

    public static $rules = array(
     'user_displayname' => 'required|unique:user,user_displayName', 
     'user_fname' => 'required', 
     'user_lname' => 'required', 
     'user_email' => 'required|unique:user,user_email', 
     'user_password' => 'required' 
    ); 


    public function isValid($data) 
    { 
     $validation = Validator::make($data, static::$rules); 

     if ($validation->passes()) return true; 

     $this->errors = $validation->messages(); 
    } 

    public function getAuthPassword() 
    { 
     return $this->user_password; 
    } 

} 

Второй вопрос. Использует ли аутрайтинг сеансы laravel или это совсем другая вещь?

EDIT:

ли Auth имеют срок аренды или что-нибудь подобное, что только удаляет сессию после того, как истечет время? Также мои столбцы базы данных «updated_at» и «created_at» дают неправильное время по сравнению с компьютером. Поэтому я думаю, что если Auth проверяет какие-то моменты, может быть, вероятность того, что он всегда терпит неудачу из-за неверно истолкованных времен.

P.S уже просмотрел другие решения в stackoverflow.

Спасибо

+0

Выглядит больше как проблема с сеансом. Чтобы ответить на ваш второй вопрос - используйте, аутентификация использует сеансы Laravel. – Laurence

+0

- это ваш идентификатор столбца 'id' или' user_id' - от просмотра вашего кода. У меня есть предположение, что вы его назвали 'user_id'? это должно быть 'id' – Laurence

+0

. Я начинаю думать, что может возникнуть проблема с настройкой сеанса. Есть ли еще какие-то настройки, кроме сеансов, которые я мог бы проверить? Я попытался изменить время жизни «config/session.php», без какого-либо воздействия. Также попытался изменить user_id на id. Ничего. – DasBoot

ответ

1

выглядит как параметры для Auth :: attemp(); в действительности попытается использовать это.

public function store() 
{ 
    $credentials = array('user_displayname'=>Input::get('user_displayname'), 
         'user_password'=> Input::get('user_password')); 
    if (Auth::attempt($credentials)) 
    { 
     return Auth::user(); 
    } 

    return 'not logged'; 
} 
+0

Нет, это не тот случай, и ваш пример неверен. Прочтите это: http://stackoverflow.com/questions/26002552/laravel-4-custom-named-password-column#26002831 –

1

Я думаю, что у Laravel есть ошибка. если вы используете Auth :: пытаетесь проверить свои учетные данные, верните true и «уничтожьте сеанс». Поэтому мы перенаправляем наш url и используем Auth :: check(), поэтому его возвращает false. потому что сеанс уничтожен, и вы потеряли данные для проверки.

0

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