【问题标题】:Satellizer OAuth Unlinking gives 404 errorSatelliteizer OAuth Unlinking 给出 404 错误
【发布时间】:2017-08-02 08:00:37
【问题描述】:

我正在使用 Facebook 的 Laravel 后端测试 satellizer 示例,一旦用户将 Facebook 帐户链接到应用程序,就不可能将其与 satellizer 取消链​​接,每当用户单击 Facebook Unilink 按钮时,它都会出现 404 错误,

http://localhost:8000/auth/unlink 

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

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

请帮我修复这个错误。

【问题讨论】:

    标签: angularjs laravel oauth satellizer


    【解决方案1】:

    你找到解决办法了吗?

    检查以下链接后,我最终找到了解决问题的方法。 https://github.com/sahat/satellizer/issues/269

    基本上在 Satellizer 文档中解释了 provider 和 httpOptions 是您可以通过 unlink 调用发送的参数,但是,选项永远不会被传递,因为它只从作为提供者的第一个参数中检索信息。

    您可以在下面的 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 问题,但解决了原始卫星取消链接函数的参数传递问题。

    发生路由问题是因为 Laravel 在函数“public function handle($request, Closure $next)”内的文件 Authenticate.php 中阻止了该路由

    你可以在没有中间件的情况下进行以太路由

    Route::post('auth/unlink', 'AuthController@unlink');
    Route::get('auth/unlink', 'AuthController@unlink');
    Route::any('auth/unlink', 'AuthController@unlink');
    

    以上内容将确保调用会以某种方式击中控制器。您如何在控制器中获取参数将取决于您是否选择 post/get/any。这意味着您将通过 Laravel 变量 $request 从

    检索参数
    public function unlink(Request $request)
    

    或者像这样使用输入门面

    $input = Input::all();
    

    在这里,您可以对传递的变量值做任何您想做的事情。现在由你来处理。

    注意:如果在 httpOptions 中没有传递任何方法,satellizer 代码默认将方法设置为 POST,如下所示:

     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 示例的代码带有调用 get 方法而不是 post 的路由并且在 js 示例中没有设置 http 的选项时,这并没有真正的帮助。这意味着您正在尝试调用 get ,其中 post 是默认值,因此该路由将永远无法工作。

    对不起,如果我不清楚,因为这是我第一次尝试在这里表达我的想法,而英语并不是我真正的第一语言。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2015-05-23
      • 2014-10-22
      • 2014-05-19
      • 2016-09-17
      • 1970-01-01
      • 2022-09-22
      • 2013-07-04
      相关资源
      最近更新 更多