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에 또한 개발자를위한 구글 콘솔에서 승인 된 리디렉션 URI에 서버의 주소를 추가 물론 : 다음은 내 코드입니다. (마치 내가 localhost를 위해했던 것처럼). 나는 왜 그것이 잘못되었는지, 왜 로그인 창이 열리지 않는지 이해하지 못합니까?
편집 :
추가 클래스 dsAuthorizationBroker (내 첫 번째 게시물에서 누락 된 - 그 하나에 미안) : 당신이 경우
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 자격 증명 = .... 하나의 라인을 로그 (로그에서) 리디렉션 uri 내가 URI를 Google 콘솔에서 URI를 가지고 uri입니다. – FrenkyB