首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Satellizer OAuth取消链接出现404错误

Satellizer OAuth取消链接出现404错误
EN

Stack Overflow用户
提问于 2016-08-20 19:48:20
回答 1查看 60关注 0票数 0

我正在用Facebook的Laravel后端测试satellizer示例,一旦用户将Facebook帐户链接到应用程序,就不可能使用satellizer解除链接,无论何时用户单击Facebook Unilink按钮都会给出404错误。

代码语言:javascript
复制
http://localhost:8000/auth/unlink 

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

代码语言:javascript
复制
Route::get('auth/unlink/{provider}', ['middleware' => 'auth', 'uses' => 'AuthController@unlink']);

请帮我修复这个bug。

EN

回答 1

Stack Overflow用户

发布于 2017-08-02 07:09:30

你找到解决这个问题的办法了吗?

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

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

您可以在下面的satellizer.js文件中的代码片段中看到有关接受的参数的更多信息。

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

我基本上已经将我想要通过变量provider (重命名为data)发送的信息包装在下面的JS代码中。

代码语言:javascript
复制
//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看起来并不美观,但可以正常工作:

代码语言:javascript
复制
provider    Object
    provider    "facebook"
    options Object
    flag    "unlink"
    view    "profile"
    userId  236

上面没有解决404问题,但解决了从原始的卫星解锁函数传递参数的问题。

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

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

代码语言:javascript
复制
Route::post('auth/unlink', 'AuthController@unlink');
Route::get('auth/unlink', 'AuthController@unlink');
Route::any('auth/unlink', 'AuthController@unlink');

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

代码语言:javascript
复制
public function unlink(Request $request)

或者像这样使用输入facade

代码语言:javascript
复制
$input = Input::all();

在这里,您可以随心所欲地处理传递的变量值。现在就看你的处理了。

注意:默认情况下,如果在httpOptions中没有传入任何方法,则satellizer代码会设置POST方法,如下所示:

代码语言:javascript
复制
 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时,这并没有真正的帮助。这意味着您正在尝试调用get,其中post是缺省的,因此路由将永远不会工作。

抱歉,如果我说得不够清楚,因为这是我第一次尝试把我的想法放在这里,而英语并不是我的第一语言。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39053776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档