2013-06-04 8 views
7

У меня с трудом работает с Laravel 4 Метод Auth :: попытка, следуйте правильной документации, читайте пару SO-потоков, но все же я не могу заставить ее работать.Laravel 4 Auth: попытка не работает

$userData = array('email' => '[email protected]','password' => 'admin'); 
if(Auth::attempt($userData)){ 
    // redirect 
} 
else{ 
    echo 'Invalid'; 
} 

И это возвращает Invalid каждый раз

Теперь я не уверен, что это истинная причина.

В моей конфигурации/auth.php я следующий

<?php 

    return array(
/* 
|-------------------------------------------------------------------------- 
| Default Authentication Driver 
|-------------------------------------------------------------------------- 
| 
| This option controls the authentication driver that will be utilized. 
| This drivers manages the retrieval and authentication of the users 
| attempting to get access to protected areas of your application. 
| 
| Supported: "database", "eloquent" 
| 
*/ 

'driver' => 'eloquent', 

/* 
|-------------------------------------------------------------------------- 
| Authentication Model 
|-------------------------------------------------------------------------- 
| 
| When using the "Eloquent" authentication driver, we need to know which 
| Eloquent model should be used to retrieve your users. Of course, it 
| is often just the "User" model but you may use whatever you like. 
| 
*/ 

'model' => 'User', 

/* 
|-------------------------------------------------------------------------- 
| Authentication Table 
|-------------------------------------------------------------------------- 
| 
| When using the "Database" authentication driver, we need to know which 
| table should be used to retrieve your users. We have chosen a basic 
| default value but you may easily change it to any table you like. 
| 
*/ 

'table' => 'users', 

/* 
|-------------------------------------------------------------------------- 
| Password Reminder Settings 
|-------------------------------------------------------------------------- 
| 
| Here you may set the settings for password reminders, including a view 
| that should be used as your password reminder e-mail. You will also 
| be able to set the name of the table that holds the reset tokens. 
| 
*/ 
'reminder' => array(
    'email' => 'emails.auth.reminder', 'table' => 'password_reminders', 
), 
); 
?> 
+0

Ive сказал вам ответ на ваш вопрос, сделайте все, что хотите. Ваши ключи массива ошибочны, учетная запись yoyur будет продолжать сбой. повеселись. – CreativityKills

+0

вам не следует беспокоиться о даун-голосованиях, dnt u думаю, если вы попробовали несколько комбинаций, также электронная почта или имя пользователя не являются обязательным вариантом по крайней мере в laravel4, http://laravel.com/docs/security.Прочтите этот документ, чтобы лучше понять .... –

+1

Я думаю, вы хотели бы связаться с [Документация Laravel 4.] (Http://four.laravel.com/docs/security) Я столкнулся с подобной проблемой прямо сейчас , Я постараюсь опубликовать здесь, как только выясню это. –

ответ

8

Не могли бы вы показать код для вашей модели? Это некоторые вещи, которые должны быть в модели User, чтобы Auth мог работать.

<?php 

    use Illuminate\Auth\UserInterface; 
    use Illuminate\Auth\Reminders\RemindableInterface; 

    class User extends Eloquent implements UserInterface, RemindableInterface{ 

    protected $fillable = array('fname','lname','email','password','create_at','updated_at'); 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = array('password'); 

    /** 
    * Get the unique identifier for the user. 
    * 
    * @return mixed 
    */ 
    public function getAuthIdentifier() 
    { 
     return $this->getKey(); 
    } 

    /** 
    * Get the password for the user. 
    * 
    * @return string 
    */ 
    public function getAuthPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Get the e-mail address where password reminders are sent. 
    * 
    * @return string 
    */ 
    public function getReminderEmail() 
    { 
     return $this->email; 
    } 
} 
-3

Ваш код пристанет, потому что вы передаете неправильные ключи массива в Auth::attempt(). Этот метод требует массива с именем пользователя, паролем и, возможно, запоминанием. В этом свете ваш вышеуказанный код должен быть:

Route::post('login', function() 
{ 
    $credentials = [ 
     'username' => '[email protected]', 
     'password' => 'superSecretPassword' 
    ]; 

    dd(Auth::attempt($credentials)); 
}); 
+0

Auth :: atempt принимает массив данных, поэтому вряд ли имеет значение, как генерируется этот массив. будь то запись массива значений жесткого кода. –

+0

Нет, это не имеет значения, но вопросы, связанные с этим методом, передаются с помощью ARRAY KEYS. Вы передавали электронную почту и пароль как ключи, но это «имя пользователя», а не «электронная почта». Это правильный ответ и решение, понятия не имею, почему кто-то проголосует ?! – CreativityKills

+2

@CreativityKills люди сбрасывают вас, потому что ваш ответ неправильный. В соответствии с документацией L4: «Обратите внимание, что электронная почта не является обязательным вариантом, она просто используется, например. Вы должны использовать любое имя столбца, соответствующее« имени пользователя »в вашей базе данных». Ссылка: http://laravel.com/docs/security#authenticating-users – brazorf

2

У меня были проблемы с этим. То, что я заметил, что в моей модели User я имел:

protected $softDelete = true; 

В базе данных у меня был столбец deleted_at, но по умолчанию с обнулены меткой времени - 0000-00-00 00:00:00. Это привело к тому, что запись не была найдена и, в свою очередь, вызвала отказ аутентификации.

Я должен был исправить миграции, чтобы столбец deleted_at правильно созданный, как так:

public function up() 
{ 
    Schema::create('users', function($t) { 
    $t->increments('id'); 
    $t->string('first_name'); 
    $t->string('last_name'); 
    $t->string('username'); 
    $t->string('email'); 
    $t->string('password'); 
    $t->softDeletes(); 
    $t->timestamps(); 
    }); 
} 

здесь находятся документы на мягкое удаление: http://laravel.com/docs/eloquent#soft-deleting

10

@ Эрик-Эванса является правильным. Чтобы использовать проверку подлинности в Laravel 4, вы должны сделать вашу модель «пользователь» использует интерфейс \ Осветите \ Auth \ пользовательским интерфейсом, и реализует методы

public function getAuthIdentifier() { 
      return $this->getKey(); 
    } 
public function getAuthPassword() { 
      return $this->password; 
     } 
0

Класс Auth требует столбец с именем идентификатора в качестве первичного ключа в вашей таблица пользователей.

+0

Нет, это не требование .. –

15

Убедитесь, что поле для вашего пароля в вашем блоке имеет место для 64 символов. varchar(64)

Хэш нуждается в 64 символах, и вы не получите ошибку от laravel, если ваш хешированный пароль усечен при вставке (и, следовательно, не сможет когда-либо проверять пароль положительно).

+0

(+1) Laravel не выбрасывал исключение, но это разрешило мою проблему. –

+0

Просто хочу поблагодарить вас. я стучал головой о стену, пытаясь понять это, и все было так просто. – Lynx

+0

(+1) Спасибо, что сэкономили мое время. У меня была такая же проблема, и я не указал размер поля пароля 64. Я думаю, что laravel должен показать некоторую ошибку, если размер меньше 64. Может быть, они добавят эту функцию в будущем :) – neeraj

0

Обратите внимание, что пользовательская таблица, поле пароля Hashed, причина Auth :: попытка ($ credentials); $ credentials-> пароль оценивать хешированный пароль

0

Проверьте, не заблокирован ли ваш пароль. Это не должно быть нормального текста.

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