【问题标题】:Laravel 5.3 Auth::attempt() always returns falseLaravel 5.3 Auth::attempt() 总是返回 false
【发布时间】:2017-05-24 14:05:03
【问题描述】:

当新用户注册后,它会自动登录,这工作正常。我正在像这样散列密码:

'$newUser->password = bcrypt($request->get('password'));' 

它成功地对密码进行哈希处理,我的用户表有密码列,即 varchar 255。我在用户表中也有 remember_token 字段。 'dd($request->all())' 返回:

array:3 [
  "email" => "info@hotmail.com"
  "_token" => "QIwnHacApWg3SotAXtoCCMFNK3FYFoFBAv2LSx4c"
  "password" => "adminadmin"
]  

而且,根据用户表记录,电子邮件和密码是 100% 正确的。 请求是 Ajax,所以我有以下 JS 代码:

$('.post-btn').click(function(){            
    $.ajax({
        url: '/sign-in',
        type: "post",
        data: {'email':$('input[name=email]').val(), '_token': $('input[name=_token]').val(),'password': $('input[name=password]').val()},
        success: function(data){
            console.log(data);
            window.location = '/';
        }
    });      
}); 

身份验证方法

public function authenticate(Request $request) {
    $validator = Validator::make($request->all(),
        [
            'email' => "required",
            'password' => 'required'   
        ]
    );

    $user = array('email' => $request->get('email'),'password' => $request->get('password'));
        if (Auth::attempt($user)) {
            $response = array(
                'status' => 'success',
                'msg' => 'Successfully Logins.',
            );
            $user = new \App\User;
            if(Auth::check()) {

            }
            return \Response::json($response);
        } else {
            $response = array(
                'status' => 'failed',
                'msg' => 'Invalid Credentials!',
            );
            return \Response::json($response);
        }
    }

输入字段名称正确。

我还缺少什么?

【问题讨论】:

  • 为什么不用Hash::make 来散列密码,这是laravel默认的。
  • 在您注册帐户时,散列似乎不起作用。当你尝试登录时,Laravel 会对你的输入进行哈希处理,并将哈希值与数据库中的内容进行比较。哈希和“adminadmin”不一样,所以失败了。
  • @jycr753 让我试试
  • 您的 ajax 请求正在发送 HTTP POST$request->get('email'); 用于 HTTP GET。请改用$request->input('email');
  • 使用$request->email$request->input('email') 代替$request->get('email')

标签: php laravel authentication login laravel-5.3


【解决方案1】:

这对我有用:

public function authenticate(Request $request)
{
    $validator = Validator::make($request->all(),
        [
            'email' => "required",
            'password' => 'required'

        ]
    );
    $email = $request->input('email');
    $password = $request->input('password');
    if (Auth::attempt(['email' => $email, 'password' => $password])) {
        // Authentication passed...
        return \Response::json([
            'status' => 'success',
            'msg' => 'Successfully Logins.',
        ]);
    }
    else {
        return \Response::json([
            'status' => 'failed',
            'msg' => 'Invalid Credentials!',
        ]);
    }
}

【讨论】:

    【解决方案2】:

    希望这会对你有所帮助..

    $user = array('email' => $request->email,'password' => $request->password);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 2016-09-12
      • 2013-06-11
      • 2015-12-10
      • 2014-03-15
      • 2019-04-14
      • 2012-10-25
      相关资源
      最近更新 更多