2017-07-27 17 views
6

लौटाता है मेरे पास पुशर कुंजी सेट है और लैरवेल 5.3 के भीतर शुरू किया गया है। जब मैं इसे अपने स्थानीय पर्यावरण पर परीक्षण करता हूं, तो यह काम करता है।लार्वेल प्रसारण ऑथ रूट बस "सच"

Pusher : Error : {"type":"WebSocketError","error":{"type":"PusherError","data":{"code":null,"message":"Auth info required to subscribe to private-App.User.16"}}} 

मैंने पुष्टि की है पुशर कुंजी पर दोनों अपने स्थानीय और उत्पादन समान होता है: जब मैं अपने उत्पादन पर्यावरण पर ठीक उसी कोड चलाने का प्रयास है, मैं इस त्रुटि मिलती है।

WS दोनों पर initializes एक ही वातावरण:

wss://ws.pusherapp.com/app/264P9d412196d622od64d?protocol=7&client=js&version=4.1.0&flash=false 

फर्क सिर्फ इतना है कि मैं देख सकता हूँ, यह है कि जब हमारी उत्पादन सर्वर संपर्कों Laravel "प्रसारण/प्रमाणन" मार्ग, यह बस में true प्राप्त करता है प्रतिक्रिया शरीर

जब मेरे स्थानीय संपर्कों "प्रसारण/प्रमाणन" यह जवाब में यह हो जाता है:

{auth: "22459d41299d6228d64d:df5d393fe37df0k3832fa5556098307f145d7e483c07974d8e7b2609200483f8"} 

मेरी BroadcastServiceProvider.php के भीतर:

public function boot() 
{ 
    Broadcast::routes(); 

    // Authenticate the user's personal channel. 
    Broadcast::channel('App.User.*', function (User $user, $user_id) { 
     return (int)$user->id === (int)$user_id; 
    }); 
} 

क्या कारण बन सकता है broadcast/auth मार्ग बस true के बजाय वापस जाने के लिए अपेक्षित लेख?

+0

क्या यह 'मार्ग/channel.php' पर नहीं होना चाहिए? [लिंक] (https://github.com/laravel/laravel/blob/master/app/Providers/BroadcastServiceProvider.php) –

+0

@ एंटोनियोससिमोर्टोस जो लैरवेल 5.3 के बाद संस्करणों के लिए है। – eComEvo

+0

यह मूलभूत है लेकिन मुझे लगता है कि यह पूछने लायक है: क्या आप यह सुनिश्चित करने के लिए 'composer.lock' का उपयोग कर रहे हैं कि आपके पास दोनों envs में एक ही डीपी है? –

उत्तर

2

आप PusherBroadcaster.php फ़ाइल की जाँच, तो आप उस प्रतिक्रिया "मिश्रित" हो सकता है देखेंगे:

मैं दोनों को स्थानीय और उत्पादन में निम्नलिखित का उपयोग करें।

मुझे लगता है कि दस्तावेज़ केवल डिफ़ॉल्ट प्रसारण के बारे में कह रहा है।

The channel method accepts two arguments: the name of the channel and a callback which returns true or false indicating whether the user is authorized to listen on the channel.

यह PusherBroadcast अंदर validAuthenticationResponse तरीका है।

/** 
* Return the valid authentication response. 
* 
* @param \Illuminate\Http\Request $request 
* @param mixed $result 
* @return mixed 
*/ 
public function validAuthenticationResponse($request, $result) 
{ 
    if (Str::startsWith($request->channel_name, 'private')) { 
     return $this->decodePusherResponse(
      $this->pusher->socket_auth($request->channel_name, $request->socket_id) 
     ); 
    } 

    return $this->decodePusherResponse(
     $this->pusher->presence_auth(
      $request->channel_name, $request->socket_id, $request->user()->getAuthIdentifier(), $result) 
    ); 
} 

बस आपको एक और उदाहरण देने के लिए, इस के अंदर RedisBroadcast है।

if (is_bool($result)) { 
    return json_encode($result); 
} 

इस "प्रमाणन अनुरोध" के बारे में संक्षिप्त विवरण:

BroadcastManager इन्स्तांत सब "उपलब्ध ड्राइवरों" (पुशर, Redis, लॉग, आदि), और "प्रमाणन" मार्ग बनाने (का उपयोग कर BroadcastController + प्रमाणित विधि)।

जब आप "प्रमाणन" कहते हैं, इस का क्या होगा:

  1. कॉल "प्रसारण .../प्रमाणन" मार्ग।
  2. BroadcastManager (अपने मामले पुशर में ) उचित ड्राइवर का दृष्टांत होगा यदि उपयोगकर्ता प्रमाणीकृत नहीं है ("उपयोगकर्ता सत्र"
  3. PusherBroadcaster एक अपवाद AccessDeniedHttpException फेंक कर सकते हैं - प्रमाणीकरण :: उपयोगकर्ता() निर्धारित नहीं है/बातिल) और एक निजी (या उपस्थिति) चैनल प्रकार तक पहुंचने की कोशिश कर रहा है।
  4. यदि उपयोगकर्ता private/presence चैनल तक पहुंचने का प्रयास कर रहा है और उपयोगकर्ता प्रमाणीकृत है (Auth :: चेक()), लैरवेल यह जांच करेगा कि क्या लेख है। उपयोगकर्ता चैनल का उपयोग कर सकते हैं। (जांचें: verifyUserCanAccessChannel विधि)।
  5. उसके बाद, validAuthenticationResponse विधि कहा जाएगा। यह विधि उपयोगकर्ता प्रमाण-पत्रों के साथ पुशर करने और एक सरणी लौटने का अनुरोध करेगी। इस सरणी में पुशर प्रतिक्रिया है (सॉकेट ऑथ: https://github.com/pusher/pusher-http-php/blob/03d3417748fc70a889c97271e25e282ff1ff0ae3/src/Pusher.php#L586/उपस्थिति ऑथ: https://github.com/pusher/pusher-http-php/blob/03d3417748fc70a889c97271e25e282ff1ff0ae3/src/Pusher.php#L615) जो एक स्ट्रिंग है।

लघु जवाब:

सू .. पुशर इस प्रमाणन प्रतिक्रिया की आवश्यकता है। अन्यथा आप उपयोगकर्ता को कनेक्ट/पहचानने में सक्षम नहीं होंगे (wss: //ws.pusherapp.com ....)।

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद। यह मुझे सही दिशा में इंगित करता है, लेकिन 'validAuthenticationResponse' में '$ परिणाम' क्यों हो सकता है विभिन्न वातावरण में पुशर से बुलियन प्रतिक्रिया हो सकती है? – eComEvo

1

संपादित करें यह संस्करण 5.5 डॉक्स से है, यहां लागू नहीं है।

मुझे लगता है कि यह समस्या चैनल के नाम में '*' वाइल्डकार्ड का उपयोग करने के साथ हो सकती है।

Broadcast::channel("servers.{id}", function (Authenticatable $user, $id) { 
    return (int)$user->getAuthIdentifier() === (int)$id; 
}); 
+0

[दस्तावेज] (https://laravel.com/docs/5.3/broadcasting#authorizing-channels) के बाद यह अजीब होगा अन्यथा कहता है। – Camilo

+0

मेरा बुरा, मैंने अनदेखा किया कि उन्होंने संस्करण के रूप में 5.3 को नोट किया। यह 5.5 के लिए है। – btl

संबंधित मुद्दे