我使用laravel 5.4作为我的应用程序的后端,而前端我正在使用angular。我正在使用laravel auth
进行身份验证。
问题Auth::attempt()
工作正常,如果我立即打印Auth::user()
然后打印数据,但如果我尝试在下一个方法中获取它,则返回false
。但是这个功能在托管服务器上运行良好。
测试,
这是我的控制器
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相关的更改?
答案 0 :(得分:0)
如果您的Angular应用程序位于laravel之外,并且在不使用刀片模板加载Angular应用程序的入口点(即Angular的index.html
)的情况下加载,那么Laravel无法设置该应用的会话,因此当您下次请求您的laravel无法识别会话时,它会在您拨打false
时提供Auth::check()
。
要在外部(即您的案例中的Angular应用程序)上实现身份验证,您应该使用Laravel Passport的密码客户端或使用https://github.com/tymondesigns/jwt-auth
< - 此程序包的基于JWT的身份验证。 (关于包的自述文件的说明)
对于基于角度和网络的应用程序,我更愿意使用JWT。