Używam VS2015, C#.Logowanie Google nie działa po opublikowaniu
Mam problem z logowaniem się do Google. Z mojej konfiguracji debugowania (localhost) wszystko działa dobrze. Po opublikowaniu na serwerze okno logowania do google po prostu się nie otwiera. I nie jest wyrzucany wyjątek. Oto mój kod:
[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
}
Oczywiście dodałem adres serwera do URI pochodzenia, a także do autoryzowanego URI przekierowania na konsoli Google dla deweloperów. (tak jak zrobiłem dla lokalnego hosta). Po prostu nie rozumiem, co jest nie tak, dlaczego okna logowania się nie otwierają?
EDIT:
Dodawanie klasa dsAuthorizationBroker (brakowało od mojego pierwszego postu - Niestety na jednym):
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);
}
}
}
Umieść kilka komunikatów debugowania, aby dowiedzieć się, co zostało wykonane. Pomoże to wyzerować główną przyczynę. Zgaduję, że nie uzyskał poprawnej wartości z AppSettings –
Jeśli opublikowałeś go na maszynie wirtualnej, niż spróbuj zobaczyć błędy z Podglądu zdarzeń – Lakhtey
@JohnPeters - Dodałem rejestrowanie. Pomyślnie zalogowałem jedną linię przed UserCredential credential = .... przekierowanie uri (z logu) jest URI, które mam w zamian URI w konsoli Google. – FrenkyB