Laravel 4 Auth: спроба не працуе

Я маю цяжкі час працы з Laravel 4 Auth :: метад спробы, а затым правільную дакументацыю, прачытаў пару SO нітак, але да гэтага часу я не магу атрымаць яго працы.

$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',
),
 );
 ?>
7
вы не павінны турбавацца аб ўніз галасавання, ДНТ і думаю, калі б паспрабаваў некалькі камбінацый, а таксама па электроннай пошце або імя карыстальніка не з'яўляецца абавязковай опцыяй прынамсі ў laravel4, laravel.com/docs/security . Прачытайце гэты дакумент, каб атрымаць лепшае разуменне ....
дададзена аўтар Aman Virk, крыніца
Я думаю, што вы мелі на ўвазе, каб спасылкі на Laravel 4 у дакументацыі. Я бягу ў падобнай праблеме прама цяпер. Я буду старацца размяшчаць тут, як толькі я зразумеў гэта.
дададзена аўтар Michael Cordingley, крыніца
Ive сказаў вам адказ на ваша пытанне, downvote ўсё, што вы хочаце. Вашы ключы масіва з'яўляюцца няправільнымі, yoyur Лагін будзе трымаць няўдачу. весяліцца.
дададзена аўтар Neo Ighodaro, крыніца

8 адказы

Make sure that your password field in your db has space for 64 characters. varchar(64)

Хэш трэба 64 сімвалаў, і вы не атрымаеце паведамленне пра памылку ад Laravel, калі ваш хэшируются пароль ўсекчы ўстаўкі (і, такім чынам, не ў стане калі-небудзь пацвердзіць пароль станоўча).

15
дададзена
(+1) Дзякуй за выратаванне майго часу. У мяне была такая ж праблема і не абвяшчаў памер поля ўводу пароля 64. Я думаю, Laravel павінен паказаць памылку, калі памер менш, чым 64. Можа быць, яны дадаць гэтую функцыю ў будучыні :)
дададзена аўтар neeraj, крыніца
Я не ведаю, Laravel заўсёды выкарыстоўвае хэш для праверкі пароля. Дзякуй!
дададзена аўтар Notflip, крыніца
У нас ёсць геніяльныя тут !!!! = D
дададзена аўтар Gustavo Sgarbi Campos, крыніца
Проста хачу падзякаваць вас. я стукаў галавой аб сцяну, спрабуючы зразумець гэта, і гэта было так проста.
дададзена аўтар Lynx, крыніца
(+1) Laravel ня кідае выключэнне, але гэта вырашыць маю праблему.
дададзена аўтар TIER 0011, крыніца
Прыкладна праз гадзіну, спрабуючы зразумець, чаму я не магу ўвайсці ў сістэму, я знайшоў адказ. Я усталяваў пароль на VARCHAR (32), і менавіта таму ён не працуе. Дзякуй!
дададзена аўтар Jayson H, крыніца

@ Эрык-Evans з'яўляецца правільным. Каб выкарыстоўваць праверку сапраўднасці ў Laravel 4, вы павінны зрабіць вашу мадэль «карыстач» выкарыстоўвае інтэрфейс \ асвятліць \ Auth \ карыстацкім інтэрфейсам, і рэалізуе метады

public function getAuthIdentifier() {
            return $this->getKey();
  }
public function getAuthPassword() {
            return $this->password;
        }
10
дададзена

Не маглі б вы паказаць код для вашай мадэлі? Вось некаторыя рэчы, якія павінны быць у мадэлі карыстальніка для таго, каб 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;
    }
}
8
дададзена

Ваш код прыстане, таму што вы перадаеце ключы няправільны масіў у Auth :: спроба() . Гэты метад патрабуе масіў з ключамі імя карыстальніка, пароль і, магчыма, памятаеце. У гэтым святле, ваш прыведзены вышэй код павінен быць:

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

    dd(Auth::attempt($credentials));
});
3
дададзена
@CreativityKills народ downvoting вас, таму што ваш адказ няслушны. Адпаведна да L4 дакументацыі: «Звярніце ўвагу, што электронная пошта не з'яўляецца абавязковай опцыяй, яна проста выкарыстоўваецца, напрыклад, Вы павінны выкарыстоўваць усе, што імя слупка адпавядае." Імя карыстальніка "у базе дадзеных.». Спасылка: laravel.com/docs/security#authenticating-users
дададзена аўтар brazorf, крыніца
Auth :: atempt прымае масіў дадзеных, так што наўрад ці мае значэнне, як ствараецца гэты масіў. Ці з'яўляецца гэта паведамленне з масіва жорсткіх значэнняў кода.
дададзена аўтар Aman Virk, крыніца
Не, гэта не мае значэння, але ARRAY КЛЮЧЫ перадаецца, што мае значэнне метаду. Вы прайшлі электронную пошту & пароль, як ключы, але гэта «імя карыстальніка», а не «па электроннай пошце». Гэта правільны адказ і рашэнне, не маюць ні найменшага падання, чаму хто-то галасаваць яго ўніз?!
дададзена аўтар Neo Ighodaro, крыніца

У мяне былі некаторыя праблемы з гэтым, а таксама. Тое, што я заўважыў, што ў маёй мадэлі 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();
  });
}

Here are the docs on soft delete: http://laravel.com/docs/eloquent#soft-deleting

2
дададзена

Note that you User table , the password field is Hashed, cause of Auth::attempt($credentials); $credentials->password evaluate the hashed password

0
дададзена

Клас Auth патрабуе слупок ID ў якасці першаснага ключа ў вашай табліцы карыстальнікаў.

0
дададзена
Не, гэта не з'яўляецца абавязковым патрабаваннем ..
дададзена аўтар Kashif.bahrian, крыніца

Праверыць Ці ваш пароль хешируется. Ён не павінен быць звычайным тэкстам ..

0
дададзена