【问题标题】:Auth::attempt doesn't work [Laravel]Auth::attempt 不起作用 [Laravel]
【发布时间】:2013-02-27 10:36:23
【问题描述】:

这是我的问题:

我有一个表 users 是:

id 用户名邮箱密码

另外,一个模型用户,在注册时,一切都很好。

现在当我想登录时,这是我的视图:

@layout('main')

@section('content')


@if(Session::has('login_errors'))

<div class='alert alert-error'>Wrong ID</div>

@endif

{{Form::open('user/login', 'POST', array('class' => 'well inline-form'))}}

{{Form::token()}}


{{Form::text('username', Input::old('username'), array('class' => 'input-large', 'placeholder' => 'email'))}}
{{Form::password('password', array('class' => 'input-large', 'placeholder' => 'Mot de passe'))}}

{{Form::submit('Login', array('class'=>'btn btn-primary'))}}

{{Form::close()}}

@endsection

这是我在控制器

中所做的
public function action_login()
{
    if(Auth::check()){return Redirect::to('user');}

    if(Request::method() == 'POST')
    {

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

        if(Auth::attempt($credentials))
        {
            return Redirect::to('user');
        }

        else
        {

            return Redirect::to('user/login')->with_input()->with('login_errors', true);

        }
    }


    Section::inject('title', 'Login');

    return View::make('user.login');

} 

它应该工作,但它没有。

错误如下:当我单击登录按钮时,我的表单传递给我的控制器并被读取。我知道我的 Input::get('username'), Input::get('password') 是正确的,并在 db 中注册。

问题是:即使我的电子邮件/密码是正确的,我也无法获得身份验证,并且我收到了我的消息错误的 ID。我希望我很清楚......

你应该知道的事情:

我没有更改配置中的Auth.php,所以用户名是电子邮件

我在注册时对密码进行哈希处理:'password' => Hash::make(Input::get('password'))

编辑和解决方案

好的,我想通了!

首先:

  • 我用的是 PHP 5.3.6,Hash 至少需要 5.3.7
  • 之后,我意识到在我的数据库中,密码最多为 40 个字符。我觉得自己很蠢

希望它会帮助某人/线程

【问题讨论】:

  • 你能提供你的路线吗?
  • 我的路由真的很简单:Route::controller(Controller::detect());

标签: authentication laravel


【解决方案1】:

首先,Controller::detect() 是一种有缺陷的方法 - 在许多地方都提倡不要走捷径并使用该方法。指定您需要的每条路线 - 它不仅更具可读性,而且更容易理解请求的情况。

如果您没有更改 auth 配置,那么这应该意味着表单提供的用户名应该是某人的 EMAIL,因为这就是 Auth 将检查的内容。因此,请确保是这种情况。如果要与用户名匹配,请务必同时设置。

此外,还需要更多信息 - 您还没有真正开始什么不起作用,只是它不起作用。究竟是什么,不起作用?确保您遵循我上面的观点,但它仍然无法正常工作,我们需要更多信息/代码。 Atm,您的错误报告相当有缺陷。

【讨论】:

  • 好的,我知道路线,但这显然不是这里的问题(我还在学习 Laravel)我已经明确指出:“我没有在配置中更改 Auth.php,所以用户名是电子邮件”,所以我知道我必须使用电子邮件作为用户名,这就是我所做的。现在,我的错误如下:当我点击登录时,我的表单传递给我的控制器。即使用户名(电子邮件)和密码正确,我仍然会收到我写的错误,以防用户输入错误的用户名/密码。因此,我尝试将用户名和密码直接传递给 Auth::attempt。也不起作用..希望我很清楚:)
  • 很遗憾,您的报告并没有您想象的那么清晰,因此需要更多信息。很高兴你明白了:)
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 2017-03-31
  • 2016-05-17
  • 2017-01-06
  • 2018-02-27
  • 2017-03-10
  • 2022-01-26
相关资源
最近更新 更多