1

我正在尝试使用 Laravel 制作身份验证和登录应用程序,但它总是失败。我总是看到“用户名或密码不正确”。在 login.blade.php 中

我的文件就像这些;

路由.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')
          ));

   });

登录.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 并将管理员添加到我的数据库中。

然后我运行 /login 显示 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,

    ),

);
4

3 回答 3

1

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

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

我建议您观看Jeffrey Way 的关于身份验证的教程。如果我找到了一些东西,我会告诉你,因为我现在也在努力解决这个问题。

于 2013-10-04T15:05:18.273 回答
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. 顺便说一句,这与Laravel-3您在问题中给出的链接有关。

于 2013-09-23T18:50:11.603 回答
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;
}

现在一切对我来说都很好。希望这对您有所帮助。

奥西

于 2013-10-12T22:34:08.887 回答