Laravel 4用户身份验证

时间:2013-12-28 02:41:34

标签: authentication laravel-4

我正在做一个简单的登录,我面临着小问题,只是无法弄清楚是什么问题。

这是我的auth.php:

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Default Authentication Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the authentication driver that will be utilized.
    | This driver 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' => 'Login',

    /*
    |--------------------------------------------------------------------------
    | 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' => 'tbl_user',

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    | The "expire" time is the number of minutes that the reminder should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'reminder' => array(

        'email' => 'emails.auth.reminder',

        'table' => 'password_reminders',

        'expire' => 60,

    ),

);

如上所示,我使用自己的模型Login和我自己的表格tbl_user

以下是我的模型(Login.php)

<?php
class Login extends Eloquent {
    protected $table = "tbl_user";

    public static function checkUser($array)
    {
        $data = DB::table('tbl_user')->where('user_email', $array['user_email'])->where('user_password', $array['user_password'])->get();

        return $data;
    }
}

现在我认为模型有问题,我只是不知道它是什么。我正在从CodeIgniter转到Laravel 4,这个auth thingy对我来说是新的。

这是路线:

Route::post('login', function(){    
    $userdata = array(
        'user_email' => Input::get('email'),
        'user_password' => Hash::make(input::get('password'))
    );

    if(Auth::attempt($userdata)){
        echo "Login Success!";
    }else{
        echo "Login Failed!";
    }
});

我登录失败了!密码被哈希! Hurmm!有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Auth使用实现Userinterface的用户模型,如果要创建自己的自定义User模型,则应该实现UserInterface,您可以在应用程序中检查deault提供的用户模型:

<?php

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

class User extends Eloquent implements UserInterface, RemindableInterface {

    /**
     * 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;
    }

}

答案 1 :(得分:0)

提到Petkostas时,您必须实施UserInterfaceRemindableInterface

此外,还要修复此行:

$userdata = array(
        'user_email' => Input::get('email'),
        'user_password' => Hash::make(input::get('password')) // no need to hash password
    );

无需在Auth::attempt()之前哈希密码,因为Laravel将为您执行此操作。

我已从代码中删除了Hash::make()

$userdata = array(
        'user_email' => Input::get('email'),
        'user_password' => input::get('password')
    );

    if(Auth::attempt($userdata)){
        echo "Login Success!";
    }else{
        echo "Login Failed!";
    }