你找到解决办法了吗?
检查以下链接后,我最终找到了解决问题的方法。
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 是默认值,因此该路由将永远无法工作。
对不起,如果我不清楚,因为这是我第一次尝试在这里表达我的想法,而英语并不是我真正的第一语言。
祝你好运。