使用Auth查找用户-Laravel

时间:2018-11-05 22:14:38

标签: php laravel

我正在尝试使用Auth在我的应用程序中找到登录用户,但是我得到trying to get property of non-object,我清楚地知道它返回空值。

在下面的代码中,一个事件触发了我的Webhook,并将帖子发送到下面的地址。函数orderCreateWebhook会触发,但这就是错误的出处。

$get_template = Order::where('id', Auth::user()->id);行。为什么Auth返回null?我也登录了,因为我在同一控制器中对其他功能正常使用auth。

是因为它是一个Webhook吗?

控制器

public function registerOrderCreateWebhook(Request $request)
    {

            $shop = "feas.myshopify.com";
            $token = "8f43d89a64e922d7d343c1173f6d";
            $shopify = Shopify::setShopUrl($shop)->setAccessToken($token);
            Shopify::setShopUrl($shop)->setAccessToken($token)->post("admin/webhooks.json", ['webhook' => 
             ['topic' => 'orders/create',
             'address' => 'https://larashop.domain.com/order-create-webhook',
             'format' => 'json'
             ]
            ]);
    }




     public function orderCreateWebhook(Request $request)
    {

         $get_template = Order::where('id', Auth::user()->id);

        $baseurl = "https://apps.domain.net/smsapi";
        $query = "?key=7e3e4d4a6cfebc08eadc&to=number&msg=message&sender_id=Shopify";
        $final_uri = $baseurl.$query;
        $response = file_get_contents($final_uri);
        header ("Content-Type:text/xml");

    }

3 个答案:

答案 0 :(得分:2)

在您的功能registerOrderCreateWebhook中,您似乎正在请求shopify api的请求,并提供了Webhook作为shopify的地址,以便成功后将用户重定向到该地址。如果正确,那么该请求将不知道生成原始请求并发出api请求的用户,因为该请求来自完全不同的来源。

您需要将一些密钥与url一起传递,然后在orderCreateWebhook中获得用户。像这样:

Shopify::setShopUrl($shop)->setAccessToken($token)->post("admin/webhooks.json", 
['webhook' => 
    ['topic' => 'orders/create',
     'address' => 'https://larashop.domain.com/order-create-webhook/some-unique-key',
     'format' => 'json'
    ]
 ]);

我的建议是将一个唯一的哈希存储在某个位置,该哈希与系统中的用户相关,也许是用户表中的一列。出于安全原因,我不会使用user_id。因此,您最终会得到类似的东西:

//route
Route::get('/order-create-webhook/{uniqueKey}', 'YourController@orderCreateWebhook');
//or
Route::post('/order-create-webhook/{uniqueKey}', 'YourController@orderCreateWebhook');
// depending on the request type used by api which calls this endpoint

// controller function
public function orderCreateWebhook($uniqueKey, Request $request)
{

     $user = User::where('unique_key', $uniqueKey)->first();
     $get_template = Order::where('id', Auth::user()->id);

     $baseurl = "https://apps.domain.net/smsapi";
     $query = "?key=7e3e4d4a6cfebc08eadc&to=number&msg=message&sender_id=Shopify";
     $final_uri = $baseurl.$query;
     $response = file_get_contents($final_uri);
     header ("Content-Type:text/xml");

}

答案 1 :(得分:1)

  

是因为它是一个Webhook吗?

是的,您不能在Webhook中使用会话。呼叫的是shopify服务器。您应该阅读该文档,它可能是一种在调用shopify api的过程中提供唯一标识符并将其返回到Webhook中以查找与您相关联的用户的方法。

答案 2 :(得分:0)

只需使用此即可获得经过身份验证的用户 在您的类/控制器中使用立面

use Illuminate\Support\Facades\Auth

public function getAuthUser(){
    $user = Auth::user()
    if(!is_null($user)
   {
    //user is authenticated
   }
  else 
   {
    // no user
   }
}