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

我使用laravel 5.4作为我的应用程序的后端和前端我使用角度.我正在使用laravel auth进行身份验证.

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

经测试,

>将会话从文件更改为数据库.
> kernel.php的变化($middleware的内容).
> php工匠制作:再一次授权.
>在用户表列中进行了更改.
>将私有$primarykey =’id’添加到模型中.
>将“web”中间件添加到所有路由.

这是我的控制器

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相关的更改?

最佳答案
如果您的Angular应用程序在laravel之外,并且在不使用刀片模板加载Angular应用程序的入口点(即Angular的index.html)的情况下加载,那么Laravel无法为应用程序设置会话,因此当您下次请求时你的laravel无法识别会话,所以当你调用Auth :: check()时它会给出错误.

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

转载注明原文:php – Auth :: check()在Laravel 5.4中返回false - 代码日志