2016-07-27 21 views
8

VS2015, C# kullanıyorum.Google login yayınlandıktan sonra çalışmıyor

Google oturum açma ile ilgili bir sorunum var. Hata ayıklama yapılandırmamdan (localhost) her şey iyi çalışıyor. Sunucuya yayınladıktan sonra, google giriş penceresi açılmıyor. Ve hiçbir istisna atılmaz.

[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 
      } 

Ben kökenli uri ve ayrıca geliştiriciler için google konsolda yetkili yönlendirme uri için sunucunun adresini eklendi Tabii: İşte benim kodudur. (tıpkı localhost için yaptığım gibi). Yanlış olanı anlamadım, neden giriş pencereleri açılmıyor?

DÜZENLEME:

ekleme sınıf dsAuthorizationBroker (ilk mesajım eksikti - o birinde üzgün): eğer

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);    
     } 
    } 
} 
+1

Son satırın gerçekleştirildiğini öğrenmek için bazı hata ayıklama bildirimleri koyun. Bu kök nedenini sıfırlamak için yardımcı olacaktır. AppSettings –

+0

'dan uygun değer elde etmediğini tahmin ediyorum. Eğer sanal makineye yayınladıysanız, Olay Görüntüleyicisi – Lakhtey

+0

@JohnPeters - hatalarını görmeye çalışıyorum. UserCredential kimlik bilgisi = .... yönlendirme işleminden önce bir satırın başarılı bir şekilde oturum açmasını istiyorum (günlüğünden) uri, google konsolunda URI karşılığında sahip olduğum uri. – FrenkyB

cevap

3
public static async Task<UserCredential> AuthorizeAsync 

Bu yöntem zaten bu nedenle GoogleWebAuthorizationBroker beyan ve Bu işlevin uygulanmasının, temel uygulamaya göre öncelik kazanması için niyetlenin, sonra yeni anahtar kelimeyi kullanmanız gerekir. Sana giriş varsayalım Bu yüzden

public new static async Task<UserCredential> AuthorizeAsync 

o baz uygulanmasını çağırıyor, bu noktada

UserCredential credential = await dsAuthorizationBroker.AuthorizeAsync 

önce çizgiyi durur. Bunun yanında

, genellikle Google ile etkileşim için DotNetOpenAuth kullanma eğiliminde ve here ve here gibi, takip etmek basit örnekler bol .. ama gerçekten sadece ardından Google Apis kullanarak kendi rulo istiyorsanız bu olduğunu en iyi place to start

+0

Cevabınız için teşekkürler. Hem senin cevabını hem de DotNetOpenAuth'ı deneyeceğim. Size sorabilirsem - belki de Twitter/Facebook ile DotNetOpenAuth ile çalışan bir örnek biliyor musunuz? – FrenkyB

+0

Önümüzdeki birkaç gün içinde bazı kodları ekleyebilirim ama kullanım durumunuzun ne olduğunu sorabilir miyim? Sadece e-postaları vb. Eğer öyleyse, Twitter ile atlamak için birkaç çember daha var. Bunu söylemek için, bir twitter örneği olan başlamanız için DotNetOpenAuth için [Örnek Kodu/Örnekler] (https://github.com/DotNetOpenAuth/DotNetOpenAuth.Samples) 'dır. – timkly

+0

Tek ihtiyacım olan giriş yapmak - kullanıcı e-postalarını almak. Sosyal oturum açma için daha fazla test vakası varsa, sıcak karşılanırsınız. – FrenkyB

İlgili konular