2016-08-20 1 views
0

나는 사용자가 Facebook Unilink 버튼을 클릭 할 때마다 404 오류,Satellizer OAuth 연결 해제 404 오류

을 누를 때마다 사용자가 Facebook 계정을 앱에 연결하면 인공위성과 연결을 끊을 수 없으므로 Facebook에 대한 Laravel 백엔드를 사용하여 예제를 테스트하고 있습니다.
http://localhost:8000/auth/unlink 

404 찾을 수 없습니다. 하지만 Laravel 라우터에서.

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

이 버그를 해결하는 데 도움을주십시오.

답변

0

해결 방법을 찾으셨습니까?

다음 링크를 확인한 후 내 문제의 해결책을 찾았습니다. https://github.com/sahat/satellizer/issues/269

기본적으로 Satellizer 문서에서 공급자 및 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); 
    }; 

내 너무 우아하지 솔루션은 다음과 같습니다 : 나는 기본적으로 (단지 데이터로 변경) 나는 변수 공급자가 전송하려는 정보를 감쌌다

<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> 

HTML 아래 JS 코드. json으로 꽤 보이지 않는보기를 통해 전송되지만 작동

//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); 
       }); 

: 위의

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

아무것도 404 문제가 해결되지하지만 원래 satellizer의 링크 해제 함수에서 매개 변수의 통과를 해결.

Laravel이

당신은 middware없이 경로를 에테르를 할 수있는 기능 "(다음 $ 요청, 폐쇄 $) 공공 기능 핸들"내부 파일 Authenticate.php에서 그 길을 차단하기 때문에 경로에 문제가 발생

like

Route::post('auth/unlink', '[email protected]'); 
Route::get('auth/unlink', '[email protected]'); 
Route::any('auth/unlink', 'AuthCo[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 예제와 코드가 올 때 :

참고 : 아래에 볼 수있는 방법이 httpOptions 전달되지 않은 경우 기본 방법에 의한 satellizer 코드 세트는 게시물에 get 메소드를 호출하는 경로는 게시물이 아니며 js 예제에서는 http 옵션이 get으로 설정되지 않습니다. 당신이 전화를하려한다는 것은 게시물이 어디에 기본이되는지를 알기 때문에 경로가 작동하지 않을 것입니다.

미안하다면 처음에는 내 생각을 여기에 넣으려고 애 쓰고 영어는 실제로 제 첫 번째 언어가 아니기 때문에 더 명확하지 않습니다.

행운을 빈다.