2015-11-04 84 views
1

我有两个控制器; AuthControllerCheckoutController现在我AuthController处理用户登录注册记忆,当用户登录我能够自己user_idAuthController检查他们的身份登录并获得。无法获得Auth :: user() - > id

然而,当我尝试做这在我CheckoutController我一直有Auth::user()->id返回此错误:

Trying to get property of non-object

无论我做什么它总是相同的,我已经在网上寻找解决方案,但还没有找到任何关于此的。

我刚刚意识到的东西,虽然,我AuthControllerCheckoutController2不同的命名空间,我想知道,这可能是原因/理由。

这是我的登录代码:

/** 
    * Handle a login request to the application. 
    * 
    * @param LoginRequest $request` 
    * @return Response 
    */ 
    public function postLogin(LoginRequest $request) 
    { 
     $credentials = $request->only('email', 'password'); 

     try { 
      // verify the credentials and create a token for the user 
      if (!$token = JWTAuth::attempt($credentials)) { 
       return response()->json(['code' => 300, 'message' => 'invalid_credentials'], 401); 
      } 
     } catch (JWTException $e) { 
      // something went wrong 
      return response()->json(['error' => 'could_not_create_token'], 500); 
     } 

     $url_parts = parse_url($request->url()); 
     $host_parts = explode('.', $url_parts['host']); 

     if ($host_parts[0] == "admin") 
     { 
      $user = User::find(Auth::user()->id); 
      if (!$user->is('administrator')) 
      { 
       Auth::logout(); 
       return response()->json(['error' => 'You Are Not Authorized!']); 
      } 
     } 

     // if no errors are encountered we can return a JWT 
     return response()->json(compact('token')); 
    } 
+0

请从'AuthController'和'CheckoutController'发布你指的代码。 – Bogdan

+0

如果您使用的是Laravel的默认身份验证,在其他名称空间中,只需使用\ Auth :: user() - > id确保用户也已登录 –

+0

好吧,我已经添加了我的登录代码。 – user3718908

回答

0

的命名空间不会不管这个,好像你可能使用了错误的方法登录的用户是您使用验证::一次,而不是验证::尝试?

+0

您是否有jwt auth中间件设置来重新登录每个请求? – RDelorier

+0

每次请求重新登录?我应该这样做吗? – user3718908

+0

好吧,我想我明白你的意思,你看到这个特定的控制器方法可以被注册和未注册的用户访问,所以我没有添加中间件。 – user3718908