以下のコードを実行すると、認証ウィンドウがポップアップし、ユーザーがログインを確認します。この部分は動作します。認証ボタンがクリックされると、これは同じウィンドウ内の前のタブにリダイレクトされます(親ウィンドウにないポップアップ内)。認証がユーザーによって確認された後、このポップアップウィンドウを閉じるにはどうしたらいいですか?また、どのようにしてURLから認証コードを取り戻すことができますか?たとえば、以下のコードでは、最初の "console.log(event.url);"実行されません。Angularjsでサードパーティのログインを使用して認証を処理する方法
var redirectUri = "http://localhost:8100/callback";
var ref = window.open('https://www.example.com/oauth/authorize?client_id=' + clientID + '&redirect_uri=' + redirectUri + '&scope=write&response_type=code&approval_prompt=force', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
ref.addEventListener('loadstart', function (event) { // THIS IS NOT TRIGGERED FOR SOME REASON
console.log(event.url);
if ((event.url).indexOf(redirectUri) === 0) {
requestToken = (event.url).split("code=")[1];
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
$http({
method: "post",
url: "https://www.example.com/oauth/token",
data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken
})
.success(function (data) {
$scope.data = data;
console.log(event.url);
})
.error(function (data, status) {
deferred.reject("Problem authenticating");
});
}
});
以下は、アプリケーションで使用されるタブです。コールバックの後でtab.exampleに戻るにはどうすればよいですか?
// setup an abstract state for the tabs directive
.state('tab', {
url: '/tab',
abstract: true,
templateUrl: 'templates/tabs.html'
})
.state('tab.example', {
url: '/example',
views: {
'tab-example': {
templateUrl: 'templates/tab-example.html',
controller: 'ExampleAPICtrl'
}
}
})
.state('callback', {
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/');
'http.php'が実行されなかった場合、' console.log'が実行されなかったことは意味がありません。時にはログがコンソールウィンドウのb/cに表示されないことがあります。しかし、それは実行されていないことを意味しません。 'console.log'にブレークポイントを入れてみてください –
基本的にウィンドウハンドラはトリガされず、そのハンドラでは何も実行されません。私は複数のハンドラを試したが、何もトリガされていない/ – Andrei
あなたのコードには欠けているようだ。私は何が行われたのか、そしてなぜそれが理解できないのですか。たとえば、なぜ 'loadstart'イベントを待ち受けるのですか?そこから放出されるのはどこですか?あなたのアプリは、別のウィンドウから送信されたイベントをピックアップすると思いますか? –