GoogleカレンダーAPIに接続するWebサービスを作成しようとしています。私のアプリを許可しようとすると、私は必要な範囲でURLを生成しました。問題は、私が生成されたURLにクライアントをリダイレクトしようとすると、私は次のメッセージを405エラーを取得しています:クライアントをGoogle OAuthにリダイレクトしようとすると405エラーが発生する
プリフライトリクエストへの応答は、アクセス制御チェックに合格しない:いいえ 「アクセス制御を-Allow-Origin 'ヘッダは、要求された リソースに存在します。したがって、オリジン 'http://localhost:8080'は許可されません。 応答にHTTPステータスコード405がありました。
ほとんどの場合、私はこのガイドに従っています:https://developers.google.com/identity/protocols/OAuth2WebServer node.jsクライアントライブラリを使用しています。
私は理解しているように、Googleがクロスオリジンのリクエストを受け入れるようにサーバーを設定していないようですが、私が理解できないのは、リクエストを送信できない場合にユーザーを認証ページにリダイレクトする方法です私のドメイン。
ここに関連するコードです:
export function authorize(req, res, callback): any {
let auth = new googleAuth();
let oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
if (// Check if we have previously stored a token.) {
oauth2Client.credentials = //get token;
callback(oauth2Client);
} else {
//redirect to google authentication page
let authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
state: '/',
scope: SCOPES
});
res.redirect(authUrl);
}
}
Aは「メソッドが許可されていません」という意味で、この文脈では、サーバーはOPTIONS要求を、あなたがヒットしようとしている 'authUrl' URLにまったく許可しません。サーバーがクロスオリジン要求を受け入れるかどうかはまったく関係ありませんが、curlやpostmanなどのツールを使用してOPTIONS要求を 'authUrl' URLに送信して確認することができます戻ってください。私はあなたが405を得るつもりであると確信しています。 – sideshowbarker
とにかく、そのサーバーがOPTIONS要求に405を与えている限り、フロントエンドJavaScriptコードからの応答に正常にアクセスする方法はありません。代わりにバックエンドコードから要求を行う必要があります。 OAuthベースのサービスの場合、フロントエンドのJavaScriptコードからアクセスできるようにXHRやFetch APIを使用することはできません。 – sideshowbarker
@sideshowbarker OPTIONSリクエストは、私が意図的に行っているものではなく、ブラウザからのプリフライトリクエストです。あなたは正しいですが、私は郵便配達員を使って同じ問題を抱えていますが、405からOPTIONSへのリクエストは、私がCORSリクエストを作成しているのでナビゲートしなければならない問題です。サーバー側にリクエストすれば、ユーザーはどのように認証されますか?たとえば、Googleの例からのリンクでは、ログインしてその例のスコープへのアクセスを許可するように要求されています。私はまだユーザーにログイン/私のアプリケーションへのアクセスを許可する必要があります。 –