2016-08-20 31 views
0

我正在測試satellizer例如與Laravel後端的Facebook,一旦用戶鏈接Facebook帳戶的應用程序,它不可能解除鏈接與衛星,每當用戶點擊Facebook Unilink按鈕它給404錯誤,衛星OAuth解除連接給404錯誤

http://localhost:8000/auth/unlink 

404未找到。 但在Laravel路由器上。

Route::get('auth/unlink/{provider}', ['middleware' => 'auth', 'uses' => '[email protected]']); 

請幫我解決這個錯誤。

回答

0

您是否找到解決方案?

檢查下面的鏈接後,我最終爲我的問題創建瞭解決方案。 的Satellizer文檔中https://github.com/sahat/satellizer/issues/269

基本上解釋說,供應商和httpOptions是你可以通過取消鏈接發送呼叫的參數,但是,從來沒有選項被傳遞,因爲它只能檢索來自這是供應商的第一個參數的信息。

您可以在satellizer.js文件的下面一段代碼中看到更多關於可接受參數的信息。

OAuth.prototype.unlink = function (provider, httpOptions) { 
     if (httpOptions === void 0) { httpOptions = {}; } 
     httpOptions.url = httpOptions.url ? httpOptions.url : joinUrl(this.SatellizerConfig.baseUrl, this.SatellizerConfig.unlinkUrl); 
     httpOptions.data = { provider: provider } || httpOptions.data; 
     httpOptions.method = httpOptions.method || 'POST'; 
     httpOptions.withCredentials = httpOptions.withCredentials || this.SatellizerConfig.withCredentials; 
     return this.$http(httpOptions); 
    }; 

我不那麼優雅的解決方案是如下:

HTML

<button class="btn btn-sm btn-danger float-left" ng-if="user.facebook" 
ng-click="unlink({provider:'facebook', options: {'param1':'value','param2':'value2'}})"><i class="ion-social-facebook"></i> Unlink Facebook Account 
</button> 

我已經基本包裹我想通過可變提供商發送的信息中(改名不僅僅是數據) JS代碼如下。

//unlink a social login profile from user's profile 
     $scope.unlink = function (data) { 
      console.log(data); 
      $auth.unlink(data) 
       .then(function() { 
        toastr.info('You have unlinked a ' + data.provider + ' account'); 
        $scope.getProfile(); 
       }) 
       .catch(function (response) { 
        toastr.error(response.data ? response.data.message : 'Could not unlink ' + data.provider + ' account', response.status); 
       }); 

的JSON通過查看已發送的並不漂亮,但工程:

provider Object 
    provider "facebook" 
    options Object 
    flag "unlink" 
    view "profile" 
    userId 236 

以上的沒有解決的問題404解決,但參數從原來的satellizer取消鏈接功能的流逝。

與路由問題是因爲Laravel被阻止在文件Authenticate.php該路由功能「公共職能手柄($請求,關閉$未來)」的內部

可以醚路線沒有middware像這樣

Route::post('auth/unlink', '[email protected]'); 
Route::get('auth/unlink', '[email protected]'); 
Route::any('auth/unlink', '[email protected]'); 

以上將確保呼叫將打到控制器一個或另一個。如何獲取控制器中的參數將取決於您選擇post/get/any。這意味着你將

public function unlink(Request $request) 

檢索通過Laravel變量$請求參數或在這裏使用輸入門面這樣

$input = Input::all(); 

你可以做你想要傳遞的變量值什麼的。現在取決於你的處理。

注:

OAuth.prototype.unlink = function (provider, httpOptions) { 
    if (httpOptions === void 0) { httpOptions = {}; } 
    httpOptions.url = httpOptions.url ? httpOptions.url : joinUrl(this.SatellizerConfig.baseUrl, this.SatellizerConfig.unlinkUrl); 
    httpOptions.data = { provider: provider } || httpOptions.data; 
    httpOptions.method = httpOptions.method || 'POST'; 
    httpOptions.withCredentials = httpOptions.withCredentials || this.SatellizerConfig.withCredentials; 
    return this.$http(httpOptions); 
    }; 

並沒有真正幫助時與Laravel示例的代碼:該satellizer代碼集默認方法,如果沒有方法在httpOptions過去了,你可以看到後下調用get方法的路由不是post,在js例子中,沒有http的選項被設置爲get。意思是你試圖打電話找到郵政是默認的地方,因此路線永遠不會工作。

對不起,如果我不是更清楚,因爲這是我第一次嘗試把我的想法放在這裏,英語不是真正的我的第一語言。

祝你好運。