我可以在Laravel会话中存储访问Cookie吗?

时间:2015-12-18 01:29:28

标签: laravel session authentication cookies

我正在使用通常通过JavaScript直接访问的远程API。在正常流程中,用户通过发送Auth标头进行身份验证,然后返回授予cookie。

我要做的是从laravel应用程序发送auth标头,在app控制器中进行身份验证,并通过laravel控制器功能提供API访问。

我希望这会像验证和发送我的后续API调用一样简单,希望提供给PHP服务器的cookie将继续授予身份验证。

嗯,这不起作用,那很好,但现在我认为我需要在Session中存储我的访问cookie,并将其发送到标题中以供将来的API调用。

这会起作用/我该如何解决这个问题?我的主管不想在远程服务器上实现OAuth类型令牌,也不想在我看来这是最好的路由,所以我有点卡住了。

2 个答案:

答案 0 :(得分:1)

Cookie无法在多台主机之间共享。 cookie(在客户端上)仅对设置它的路径有效。

答案 1 :(得分:0)

编辑 - 添加附加声明详细信息

在Laravel中设置记住我

  1. 迁移(创建)时,用户表添加$ table-> rememberToken() 在User表中创建该列。
  2. 当用户注册您的服务时,请添加一个复选框以允许他们使用 做出决定或者如果你不提供,你可以设置为真 用户选择步骤3中描述的选项
  3. < input type="checkbox" name="remember" >

    1. 在控制器中添加以下代码:

      if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // The user is being remembered... }

    2. 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 
      }