【问题标题】:Laravel 5.1: Auth::attemp() success but Auth::check() return falseLaravel 5.1:Auth::attempt() 成功但 Auth::check() 返回 false
【发布时间】:2015-12-14 09:58:54
【问题描述】:

我已经在寻找与此相关的问题,但尚未解决。

link 1link 2link 3

  • Auth::attempt() 成功
  • Auth::attempt() 成功后尝试注册会话
  • users 表中的remember_token 字段始终为空

这是我的代码:

AuthController:

protected function login(Request $request){
    $result = [];
    $rules = ['email' => 'required|email', 'password' => 'required|alphaNum|min:3'];
    $validator = Validator::make($request->all(), $rules);

    if($validator->fails()) {
        $result['message'] = 'Login Failed';

    }else{
        $userdata = ['email' => $request->email, 'password' => $request->password];
        if (Auth::attempt($userdata, $request->has('auth_remember'))) {
            // dd(Auth::user()); << THIS DATA IS EXIST
            // $request->session()->push('user.id', Auth::user()->id);
            // $request->session()->push('user.name', Auth::user()->name);
            // $request->session()->push('user.email', Auth::user()->email);

            // dd($request->session()->all()); << THIS DATA IS EXIST
            $result['message'] = 'Login successfull. Redirecting ...';
        }else{
            $result['message'] = 'User not found';
        }
    }
    echo json_encode($result);
}

我去http://.../dashboard时有一个中间件Auth,但是...

  • Auth::check() 返回 false
  • $request->session()->has('user') 返回 false

认证中间件:

    public function handle($request, Closure $next){
      if($this->auth->viaRemember()) return $next($request);

      if($this->auth->guest()){
        if($request->ajax()){
            return response('Unauthorized.', 401);
        }else{
            return redirect()->guest('login');
        }
      }

      return $next($request);
  }
  • 存储/框架/会话已设置为 777
  • 文件会话已生成
  • 应用时区已与服务器设置和数据库设置匹配

任何帮助将不胜感激。

【问题讨论】:

  • 我现在也有同样的问题。我怀疑user 表及其字段 - idusernamepassword 是否可能是问题所在。我试图修改SessionGuard::user() 函数,但似乎会话是空的。会话有名字,但是/storage/framework/sessions 下没有这样的文件。这个问题没人解决吗?
  • 我解决了这个问题。 user 表及其字段 - idusernamepassword 是问题所在。尝试根据您的数据库更改User 模型的$primaryKey$table

标签: php session authentication laravel-5.1


【解决方案1】:

我想我解决了这个问题。

使用 Ajax 时,Laravel 身份验证不起作用。只需按照http://laravel.com/docs/5.1/authentication 的文档进行操作即可!

但这很奇怪!使用 ajax 进行身份验证在我的本地主机中运行良好,但在我将其上传到服务器时却没有。

【讨论】:

  • 请您用一些代码示例解释一下您的意思吗?
【解决方案2】:

删除此行:

$request->session()->push('user.id', Auth::user()->id);
$request->session()->push('user.name', Auth::user()->name);
$request->session()->push('user.email', Auth::user()->email);

并使用 dd($request) 验证 auth_remember

【讨论】:

  • 这只是暂时的,只是为了确保会话正常工作。但是 Auth::check() 总是返回 false,即使我删除了那些脚本。
【解决方案3】:

为什么要手动将记录的用户数据添加到会话中,您可以在尝试后随时使用Auth::user() 获取用户数据

【讨论】:

  • 确保会话在中间件中正常工作只是暂时的,但即使我尝试使用会话仍然没有运气
猜你喜欢
  • 2015-03-03
  • 2017-05-11
  • 2020-02-14
  • 2019-05-24
  • 2018-01-07
  • 2014-11-22
  • 1970-01-01
  • 2016-09-12
  • 2017-05-24
相关资源
最近更新 更多