Exemplo n.º 1
0
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            Identifier id;

            if (!Identifier.TryParse(model.OpenIdProvider, out id))
            {
                ModelState.AddModelError("OpenId", "Invalid Open Id");
                return(View(model));
            }

            try
            {
                var authRequest = openid.CreateRequest(id);

                authRequest.AddCallbackArguments("rememberMe", model.RememberMe.ToString());

                OpenIdUserData.AddClaimsRequest(authRequest);

                return(authRequest.RedirectingResponse.AsActionResultMvc5());
            }
            catch (ProtocolException ex)
            {
                ModelState.AddModelError("err", ex.Message);
                return(View(model));
            }
        }
Exemplo n.º 2
0
        private User GetOrCreateUserForOpenId(string claimedIdentifier, OpenIdUserData u)
        {
            var existing = Session.QueryOver <UserOpenId>()
                           .Where(x => x.OpenIdentifier == claimedIdentifier)
                           .Fetch(x => x.User).Eager
                           .SingleOrDefault();

            if (existing != null)
            {
                return(existing.User);
            }

            var newUser = new User
            {
                DisplayName = u.DisplayName ?? "Anonymous",
                Email       = u.Email,
                JoinDateUTC = DateTime.UtcNow
            };

            Session.Save(newUser);
            Session.Save(new UserOpenId
            {
                User           = newUser,
                OpenIdentifier = claimedIdentifier
            });

            return(newUser);
        }
Exemplo n.º 3
0
            public static OpenIdUserData CreateFromResponse(IAuthenticationResponse r)
            {
                var userData = new OpenIdUserData();

                var claimsResponse = r.GetExtension <ClaimsResponse>();

                if (claimsResponse != null)
                {
                    userData.Email       = claimsResponse.Email;
                    userData.DisplayName = claimsResponse.Nickname ?? claimsResponse.FullName;
                }

                return(userData);
            }
Exemplo n.º 4
0
        public ActionResult Login(string returnUrl)
        {
            var response = openid.GetResponse();

            if (response == null)
            {
                return(View(new LoginModel()));
            }

            //check the response status
            switch (response.Status)
            {
            //success status
            case AuthenticationStatus.Authenticated:

                var userData = OpenIdUserData.CreateFromResponse(response);
                var user     = GetOrCreateUserForOpenId(response.ClaimedIdentifier, userData);

                bool rememberMe;
                bool.TryParse(response.GetCallbackArgument("rememberMe"), out rememberMe);

                SetUserAuthCookie(user, rememberMe);

                if (Url.IsLocalUrl(returnUrl))
                {
                    return(Redirect(returnUrl));
                }
                else
                {
                    return(RedirectToAction("Index", "Home"));
                }

            case AuthenticationStatus.Canceled:
                ModelState.AddModelError("err", "Canceled at provider");
                break;

            case AuthenticationStatus.Failed:
                ModelState.AddModelError("err", response.Exception.Message);
                break;
            }

            return(View(new LoginModel()));
        }