我正在使用通常通过JavaScript直接访问的远程API。在正常流程中,用户通过发送Auth标头进行身份验证,然后返回授予cookie。
我要做的是从laravel应用程序发送auth标头,在app控制器中进行身份验证,并通过laravel控制器功能提供API访问。
我希望这会像验证和发送我的后续API调用一样简单,希望提供给PHP服务器的cookie将继续授予身份验证。
嗯,这不起作用,那很好,但现在我认为我需要在Session中存储我的访问cookie,并将其发送到标题中以供将来的API调用。
这会起作用/我该如何解决这个问题?我的主管不想在远程服务器上实现OAuth类型令牌,也不想在我看来这是最好的路由,所以我有点卡住了。
答案 0 :(得分:1)
Cookie无法在多台主机之间共享。 cookie(在客户端上)仅对设置它的路径有效。
答案 1 :(得分:0)
编辑 - 添加附加声明详细信息
在Laravel中设置记住我
< input type="checkbox" name="remember" >
在控制器中添加以下代码:
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// The user is being remembered...
}
Users表必须包含每个字符串的remember_token列,现在假设您已将令牌列添加到User表中,您可以将一个布尔值作为第二个参数传递给attempt方法,这将使用户无限期地进行身份验证,或直到他们手动注销。即Auth :: attempt([$ creditentials],true);
附注:the Illuminate\Contracts\Auth\UserProvider
合同,公共函数updateRememberToken(Authenticatable $user, $token)
使用用户表中存储的用户UID和令牌来存储会话身份验证。
AUTH ONCE:
Laravel有一种方法可以将用户登录到单个请求的应用程序中。没有会话或cookie。与无状态API一起使用。
if (Auth::once($credentials)) {
//
}
其他说明
当用户退出时,记住cookie不会自动取消设置。但是,如我在下面的Cookie示例中所述,您可以在注销后返回重定向响应之前将其添加到控制器的注销功能中。
public function logout() {
// your logout code e.g. notfications, DB updates, etc
// Get remember_me cookie name
$rememberCookie = Auth::getRecallerName();
// Forget the cookie
$forgetCookie = Cookie::forget($rememberCookie);
// return response (in the case of json / JS) or redirect below will work
return Redirect::to('/')->withCookie($forgetCookie);
OR you could q$ueue it up for later if you are elsewhere and cannot return a response immediately
Cookie::queue(forgetCookie);
}
可能对您有帮助的基本常规Cookie示例。使用Laravel服务提供商
有更好的方法// cookie key
private $myCookieKey = 'myAppCookie';
// example of cookie value but can be any string
private $cookieValue = 'myCompany';
// inside of a controller or a protected abstract class in Controller,
// or setup in a service ... etc.
protected function cookieExample(Request $request)
{
// return true if cookie key
if ($request->has($this->myCookieKey)) {
$valueInsideOfCookie = Cookie::get($this->myCookieKey);
// do something with $valueInsideOfCookie
} else {
// queue a cookie with the next response
Cookie::queue($this->myCookieKey, $this->cookieValue);
}
}
public function exampleControllerFunction(Request $request)
{
$this->cookieExample($request);
// rest of function one code
}
public function secondControllerFunction(Request $request)
{
$this->cookieExample($request);
// rest of function two code
}