私はVS2015、C#を使用しています。公開後にGoogleのログインが機能しない
Googleログインに問題があります。私のデバッグ設定(localhost)から、すべて正常に動作します。サーバーに公開した後、googleのログインウィンドウは単に開かれません。例外もスローされません。
[AllowAnonymous]
public async Task LoginWithGoogle()
{
HttpRequest request = System.Web.HttpContext.Current.Request;
string redirectUri = ConfigurationReaderHelper.GetGoogleRedirectUri();
try
{
ClientSecrets secrets = new ClientSecrets
{
ClientId = "***",
ClientSecret = "***"
};
IEnumerable<string> scopes = new[] { PlusService.Scope.UserinfoEmail, PlusService.Scope.UserinfoProfile };
GoogleStorageCredentials storage = new GoogleStorageCredentials();
dsAuthorizationBroker.RedirectUri = redirectUri;
UserCredential credential = await dsAuthorizationBroker.AuthorizeAsync(secrets,
scopes, "", CancellationToken.None, storage);
}
catch(Exception ex)
{
throw ex;
}
}
//just getting value from applicationSettings - web.config
public static string GetGoogleRedirectUri()
{
#if DEBUG
return GetValueFromApplicationSettings("RedirectUriDEBUG");
#elif PRODUKCIJA
return GetValueFromApplicationSettings("RedirectUriSERVER");
#endif
}
私は元のURIにしても、開発者のためのGoogleのコンソール上の認可リダイレクトURIにサーバのアドレスを追加しましたもちろん: はここに私のコードです。 (ちょうど私がローカルホストのためにしたのと同じように)。私はちょうど何が間違っているのか、なぜログインウィンドウが開かれないのか分かりません。
EDIT:
追加クラスdsAuthorizationBroker(私の最初のポストから欠落していた - その1で申し訳ありません):あなたの場合
namespace Notes
{
public class dsAuthorizationBroker : GoogleWebAuthorizationBroker
{
public static string RedirectUri;
public static async Task<UserCredential> AuthorizeAsync(
ClientSecrets clientSecrets,
IEnumerable<string> scopes,
string user,
CancellationToken taskCancellationToken,
IDataStore dataStore = null)
{
var initializer = new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = clientSecrets,
};
return await AuthorizeAsyncCore(initializer, scopes, user,
taskCancellationToken, dataStore).ConfigureAwait(false);
}
private static async Task<UserCredential> AuthorizeAsyncCore(
GoogleAuthorizationCodeFlow.Initializer initializer,
IEnumerable<string> scopes,
string user,
CancellationToken taskCancellationToken,
IDataStore dataStore)
{
initializer.Scopes = scopes;
initializer.DataStore = dataStore ?? new FileDataStore(Folder);
var flow = new dsAuthorizationCodeFlow(initializer);
return await new AuthorizationCodeInstalledApp(flow,
new LocalServerCodeReceiver())
.AuthorizeAsync(user, taskCancellationToken).ConfigureAwait(false);
}
}
public class dsAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
{
public dsAuthorizationCodeFlow(Initializer initializer)
: base(initializer) { }
public override AuthorizationCodeRequestUrl
CreateAuthorizationCodeRequest(string redirectUri)
{
return base.CreateAuthorizationCodeRequest(dsAuthorizationBroker.RedirectUri);
}
}
}
実行された最後の行を見つけるためのいくつかのデバッグステートメントを入れてください。根本原因をゼロにするのに役立ちます。私はAppSettings –
から適切な値を得ていないと推測しています。イベントビューアのエラーを表示しようとするよりも仮想マシンに公開した場合 – Lakhtey
@JohnPeters - ログを追加しました。私はsuccessfuly UserCredentialの資格情報の前に1行をログに記録します....(ログから)リダイレクトuriは、私はグーグルコンソールに返信URIを持っているuriです。 – FrenkyB