Laravel Auth,登录不起作用。它总是返回假?

时间:2013-09-23 18:11:06

标签: login laravel

我正在尝试使用Laravel创建一个Auth和Login应用程序,但它总是失败。 我总是看到“用户名或密码不正确”。在login.blade.php中

我的文件就像theese;

route.php

    Route::get('login' , function() {    
       return View::make('auth.login');
    });

    Route::post('logincontrol', function() {

        $userdata = array(
            'username'      => Input::get('username'),
            'password'      => Input::get('password') 
        );

        if ( Auth::attempt($userdata) )
        {
            return Redirect::to('auth.dashboard');
        }
        else
        {
            return Redirect::to('login')
                ->with('login_errors', true);
        }

    });



    Route::get('dashboard', function(){  

        echo 'welcome';
    });

       Route::get('insert', function() {

           DB::table('users')->insert(array(
          'username'  => 'admin',
          'password'  => Hash::make('admin')
          ));

   });

login.blade.php

{{ Form::open( array('url' => 'logincontrol') ) }}

    <!-- check for login errors flash var -->
    @if (Session::has('login_errors'))
        <span class="error">Username or password incorrect.</span>
    @endif

    <!-- username field -->
    <p>{{ Form::label('username', 'Username') }}</p>
    <p>{{ Form::text('username') }}</p>

    <!-- password field -->
    <p>{{ Form::label('password', 'Password') }}</p>
    <p>{{ Form::password('password') }}</p>

    <!-- submit button -->
    <p>{{ Form::submit('Login') }}</p>

{{ Form::close() }}

首先,我运行插入URL并将admin添加到我的数据库。

然后我显示/登录URL表单。我在插入路由中输入用户名和密码,但我总是变错。

我从http://codehappy.daylerees.com/authentication获取了代码,我阅读了所有页面但我无法做到。

编辑:我试过了;

'password'      => Hash::make( Input::get('password') ) 

但它不起作用:(

编辑:我的auth.php文件是这样的。

return array(

    'driver' => 'eloquent',
    'username'=>'username', 
    'model' => 'User', 
    'table' => 'users',
    'reminder' => array(

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

        'table' => 'password_reminders',

        'expire' => 60,

    ),

);

3 个答案:

答案 0 :(得分:1)

总是在变化的Hash是正常的,因为Hash :: check()'进程使用哈希中嵌入的salt来比较纯文本值。 有关此外观的更多信息,请点击此处 http://laravel.io/topic/20/hashing-in-laravelhttp://en.wikipedia.org/wiki/Salt_(cryptography)

我偶然发现了你的问题,因为我遇到了确切的错误......

我建议您观看Jeffrey Way关于身份验证的tutorial。如果我发现了什么,我会告诉你,因为我现在也在努力解决这个问题。

答案 1 :(得分:0)

可以在authentication中找到application/config/auth.php的配置,在此文件中,有一个username的设置,如

/*
|--------------------------------------------------------------------------
| Authentication Username
|--------------------------------------------------------------------------
|
| Here you may specify the database column that should be considered the
| "username" for your users. Typically, this will either be "username"
| or "email". Of course, you're free to change the value to anything.
|
*/

默认情况下是

'username' => 'email',

在你的情况下,它是username,因为你有

DB::table('users')->insert(array(
    'username'  => 'admin', // looks like you are using username for login
    'password'  => Hash::make('admin')
));

并按照登录代码

$userdata = array(
    'username'      => Input::get('username'), // you are using username field
    'password'      => Input::get('password') 
);

// Login
if ( Auth::attempt($userdata) )
{
    //...
}

因此,如果您未在application/config/auth.php文件中更改它,则应将其更改为

'username' => 'username',

或者,您可以在表格中使用email字段,并使用email字段而不是username进行身份验证。顺便说一句,根据问题中的given link,这与Laravel-3相关。

答案 2 :(得分:0)

有时它会让你感到简单。 今天我花了很多时间处理类似的问题,我的案例中的解决方案是我使用的是artisan generate:scaffold,它创建了用户模型;

class User extends Eloquent

我通过添加

修改了这个模型

implements UserInterface, RemindableInterface

然后添加了以下缺少的功能:

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

现在一切都适合我。希望这会对你有所帮助。

OSSI