基本的Laravel身份验证无法登录。

3

我有账户id和密码,存在账户表格中。我将使用账户id和密码登录。但结果很糟糕。

auth.php

'driver' => 'database',
'model' => 'Pass',
'table' => 'account',

models/Pass.php

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

class Pass extends \Eloquent implements UserInterface, RemindableInterface 
{
    use UserTrait, RemindableTrait;

protected $table = 'account';

PassController.php

public function authenticate()
{
$userdata = array( 'id' => Input::get('id'), 'password' => Input::get('password'));
    if(Auth::attempt($userdata)) 
    {
        echo 'oke';
    } 
    else 
    {
        echo 'bad';
    }
}

在视图中

{{Form::open(array('action' => 'PassController@authenticate')) }}
...

routes.php

Route::post('book/auth', 'PassController@authenticate');

如何解决这个问题?我使用的是 Laravel 4.2。

请查看config文件夹中的auth.php。您应该将“user”表更改为“account”表。 - Sulthan Allaudeen
是的,auth.php 就像上面所述。 - ka ern
为什么要使用ID和密码进行登录?如果您有ID,则可以使用以下方法登录。它不需要密码。 Auth :: loginUsingId(Input :: get('id')); - Jeno Karthic
ID作为用户名,密码仍然是密码。如果用户名和密码匹配,则登录成功。 - ka ern
由于您正在使用模型进行身份验证,因此应使用“eloquent”auth驱动程序。 - lukasgeiter
显示剩余2条评论
1个回答

5
你肯定应该并且必须把密码进行哈希存储,将明文密码存储在数据库中会造成重大安全风险。
当然,你需要在创建新用户时对密码进行哈希处理(在注册控制器或类似位置)。
但是,如果要手动更改现有密码,则可以使用artisan tinker来生成哈希值。
php artisan tinker
> echo Hash::make('your-secret-password');

然后复制哈希值并在您的数据库中进行更新。

还要确保您数据库中的密码字段至少为60个字符长,否则哈希值将被截断。

更新

为测试,请尝试此代码:

public function authenticate()
{
    $user = Pass::find(Input::get('id'));
    if(Hash::check(Input::get('password'), $user->password))
    {
        echo 'oke';
    } 
    else 
    {
        echo 'bad';
    }
}

更新2

如果您的哈希密码列名为hashed_pass(或任何其他名称而不是password),则需要在模型中指定:

public function getAuthPassword()
{
    return $this->hashed_pass;
}

这种方式可以让你直接访问URL /hash/your-secret-password,然后它会输出该密码的哈希值。然后将其复制并更新到你的数据库中。但这本身就是一个重大的安全风险。访问此URL将在你的纯文本Web服务器日志中记录密码(如果你有类似Google Analytics的东西,也会记录)。最好使用php artisan tinker来完成此操作。 - ceejayoz
@ceejayoz,我只是建议在开发中使用这个。然而,我显然忘记了提到这一点... 我会把我的答案改成 php artisan tinker。谢谢。 - lukasgeiter
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - ka ern
我会创建许多用户名和密码,并提供给用户用于登录表单页面,如果表单被提交,用户名和密码将被删除(业务规则)。 - ka ern
不是的,我只是想确认一下。我更新了我的答案并添加了一些代码。你能测试一下吗? - lukasgeiter
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接