在Laravel 5.4中,Auth :: check()返回false

时间:2018-03-29 09:13:34

标签: php laravel laravel-5

我使用laravel 5.4作为我的应用程序的后端,而前端我正在使用angular。我正在使用laravel auth进行身份验证。

问题Auth::attempt()工作正常,如果我立即打印Auth::user()然后打印数据,但如果我尝试在下一个方法中获取它,则返回false。但是这个功能在托管服务器上运行良好。

测试,

  1. 将会话从文件更改为数据库。
  2. kernel.php($ middleware的内容)的变化。
  3. php artisan做了:auth再一次。
  4. 在用户表列中进行了更改。
  5. 将私有$ primarykey ='id'添加到模型。
  6. 将“网络”中间件添加到所有路由。
  7. 这是我的控制器

    namespace App\Http\Controllers\Auth;
    use App\Http\Controllers\Controller;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Support\Facades\Input;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use App\User;
    
    public function login()
    {
     if (Auth::attempt(['email' => $email, 'password' => $password ])) 
            {
                $response = array('response' =>'Succssfully Login!' , 'success' => true);
    
                return $response;
            }
     }
    

    这是我在同一个控制器中使用Auth::check()的地方

    public function check() 
    {
        if(Auth::check())
            $response = array('response' =>'Authenticated' , 'success'=>true);
        else
            $response = array('response' =>'UnAuthenticated' , 'success'=>false);
    
        return $response;    
    }
    

    我很困惑,因为相同的代码在托管服务器中正常工作但不在localhost上工作。我是否需要在laravel中进行任何与http相关的更改?

1 个答案:

答案 0 :(得分:0)

如果您的Angular应用程序位于laravel之外,并且在不使用刀片模板加载Angular应用程序的入口点(即Angular的index.html)的情况下加载,那么Laravel无法设置该应用的会话,因此当您下次请求您的laravel无法识别会话时,它会在您拨打false时提供Auth::check()

要在外部(即您的案例中的Angular应用程序)上实现身份验证,您应该使用Laravel Passport的密码客户端或使用https://github.com/tymondesigns/jwt-auth< - 此程序包的基于JWT的身份验证。 (关于包的自述文件的说明)

对于基于角度和网络的应用程序,我更愿意使用JWT。