2016-03-27 2 views
2

Я уже закончил сайт MVC, который использует Oauth 1.0
Когда я пытаюсь сделать авторизацию с учетной записью google с localhost (из режима отладки), я свободно делаю авторизацию без каких-либо проблем, но когда я публикую свой сайт на сервере, у меня есть некоторые проблемы, когда я нажимаю кнопку «google LogIn», я получаю ошибку. см. экран ниже., когда я пытаюсь сделать авторизацию google get Error: invalid_request Ошибка при публикации сайта. Oauth 1.0

Разработчики, пожалуйста, помогите мне решить эту проблему. tank you

P.S. 192.168.77.155-это мой внутренний IP-сервер, но я не могу себе представить, почему это показать.

enter image description here

возвращение Информация Hare:

enter image description here

internal class ExternalLoginResult : ActionResult 
     { 
      public ExternalLoginResult(string provider, string returnUrl) 
      { 
       Provider = provider; 
       ReturnUrl = returnUrl; 
      } 

      public string Provider { get; private set; } 
      public string ReturnUrl { get; private set; } 

      public override void ExecuteResult(ControllerContext context) 
      { 
       OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl); 
      } 
     } 

public ActionResult ExternalLoginCallback(string returnUrl) 
     { 
      GooglePlusClient.RewriteRequest(); 

      var result = OAuthWebSecurity.VerifyAuthentication(); 
      if (result.IsSuccessful) 
      { 
       ProfilePicture helper = new ProfilePicture(); 

       // name of the provider we just used 
       OauthProvider provider = helper.GetProvider(result.Provider); 
       if ((int)provider == 0) 
       { 
        Logger.Fatal("Unknown Oauth Provider try to SignIn. Check Providers Name (maybe it changeed)"); 
        return null; //todo MessageBox for Unkown Provider, or something wrong 
       } 
       // provider's unique ID for the user 
       var uniqueUserID = result.ProviderUserId; 
       // since we might use multiple identity providers, then 
       // our app uniquely identifies the user by combination of 
       // provider name and provider user id 
       var uniqueID = provider + "/" + uniqueUserID; 

       // we then log the user into our application 
       // we could have done a database lookup for a 
       // more user-friendly username for our app 
       FormsAuthentication.SetAuthCookie(uniqueID, false); 

       string userName; 
       string nameAndLsatName = string.Empty; 
       var userDataFromProvider = result.ExtraData; 
       if (provider.Equals(OauthProvider.Twitter)) 
       { 
        userName = result.UserName; 
       } 
       else 
       { 
        userName = userDataFromProvider["username"]; 
        nameAndLsatName = userDataFromProvider["name"]; 
       } 

       //Check if user already is in Db with Provider 
       var chekUserName = Uow.Users.Data.Where(x => x.UserName == userName && x.UserGroup.Id == (int)provider).FirstOrDefault(); 
       if (chekUserName == null) 
       { 
        MM.Data.Model.User user = new MM.Data.Model.User(); 

        user.UserName = userName; 
        if (!provider.Equals(OauthProvider.Twitter)) 
        { 
         user.FirstName = nameAndLsatName.Split(' ')[0]; 
         user.LastName = nameAndLsatName.Split(' ')[1]; 
        } 
        user.Email = userName; //it'a Email 
        if (provider.Equals(OauthProvider.Twitter)) 
        { 
         user.ShowNameAndLastName = false; 
        } 
        else 
        { 
         user.ShowNameAndLastName = true; 
        } 
        user.GroupId = (int)provider; 
        if (provider.Equals(OauthProvider.Twitter)) 
        { 
         user.ProfilePicture = helper.GetImageInBytesByProvider(provider, userName); 
        } 
        else 
        { 
         user.ProfilePicture = helper.GetImageInBytesByProvider(provider, uniqueUserID); 
        } 
        Uow.Users.Add(user); 
        Uow.SaveChanges(); 

       } 

       //Valid Login 
       //todo need improvement 
       var userModel = Uow.Users.GetSingle(x => x.UserName == userName && x.UserGroup.Id == (int)provider); 
       Session["User"] = new LoggedUserModel 
       { 
        Id = userModel.Id, 
        UserName = userName, 
        ProfilePicture = userModel.ProfilePicture 
       }; 

       Session["UserId"] = userModel.Id; 

       //FormsAuthentication.SetAuthCookie(useruserNamename, false); 
       if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
       { 
        return Redirect(returnUrl); 
       } 
       return RedirectToAction("Index", "Home"); 

       // return View("", result); 
      } 
      return null; //need change 
     } 

ответ

0

на скриншоте, что вы прилагается, я вижу, что redirect_uri ваш 192.168.77.155 IP. Если вы исправите его, Google перенаправит обратно на правильный IP-адрес.

+0

Мой сайт не использует внутренний IP-адрес моего сервера (192.168.77.155), он не является публичным IP-адресом. –

+0

Пожалуйста, разместите код, который вы использовали для перенаправления на экран Google. – Rajat

+0

Я думаю, что это не вина в коде, потому что в Localhost все работает хорошо. но я уже обновляю вопрос и, пожалуйста, см. его –