2

我已经完成了使用 Oauth 1.0 的 MVC 站点
当我尝试从本地主机(从调试模式)使用 google 帐户进行授权时,我可以流畅地进行授权,没有任何问题,但是当我在服务器上发布我的站点时我遇到了一些问题,当我点击按钮“谷歌登录”我得到错误。请看下面的屏幕。

请开发人员帮我解决这个问题。保护你

PS 192.168.77.155 - 这是我的内部服务器 IP,但我无法想象为什么要显示它。

在此处输入图像描述

返回信息野兔:

在此处输入图像描述

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

1 回答 1

0

在您附加的屏幕截图中,我看到 redirect_uri 是您的 192.168.77.155 ip。如果您更正它,谷歌将重定向回正确的 IP 地址。

于 2016-03-28T13:10:39.880 回答