Laravel 5.1:Auth :: attempt()成功但Auth :: check()返回false

时间:2015-09-17 13:45:02

标签: php session authentication laravel-5.1

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

link 1link 2link 3

  • Auth :: attempt()成功
  • 尝试在Auth :: attempt()成功后注册会话
  • 用户表上的
  • 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-&gt; session() - &gt;有(&#39;用户&#39;)返回false

Auth Middleware:

    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
  • 生成
  • 文件会话
  • app timezone已与服务器设置和数据库设置匹配

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

删除以下行:

$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

答案 2 :(得分:-1)

我想我解决了这个问题。

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

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