public async Task <ActionResult> Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                ApplicationUser user = await UserManager.FindAsync(model.Name, model.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "Invalid username or password");
                }
                else
                {
                    try
                    {
                        var claimsIdentity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                        claimsIdentity.AddClaims(LocationClaimsProvider.GetClaims(claimsIdentity));
                        claimsIdentity.AddClaims(ClaimsRoles.CreateRolesFromClaims(claimsIdentity));
                        AuthManager.SignOut();
                        AuthManager.SignIn(new AuthenticationProperties {
                            IsPersistent = false
                        }, claimsIdentity);
                    }
                    catch (System.Exception ex)
                    {
                        throw;
                    }

                    return(Redirect(returnUrl));
                }
            }
            ViewBag.returnUrl = returnUrl;

            return(View(model));
        }
Esempio n. 2
0
        public async Task <ActionResult> Login(LoginViewModel details, string returnUrl)
        {
            AppUser user = await UserManager.FindAsync(details.Name, details.Password);

            if (user == null)
            {
                ModelState.AddModelError("", "Некорректное имя или пароль.");
            }
            else
            {
                ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user,
                                                                             DefaultAuthenticationTypes.ApplicationCookie);

                // Мы добавили только эту строку
                ident.AddClaims(LocationClaimsProvider.GetClaims(ident));
                ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));

                AuthManager.SignOut();
                AuthManager.SignIn(new AuthenticationProperties
                {
                    IsPersistent = false
                }, ident);
                return(Redirect(returnUrl));
            }

            return(View(details));
        }
Esempio n. 3
0
        public async Task <ActionResult> Login(LoginModel details, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                AppUser user = await UserManager.FindAsync(details.Name, details.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "Invalid name or password.");
                }
                else
                {
                    ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                    ident.AddClaims(LocationClaimsProvider.GetClaims(ident));
                    ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));
                    AuthManager.SignOut();
                    AuthManager.SignIn(new AuthenticationProperties {
                        IsPersistent = false
                    }, ident);

                    return(Redirect(returnUrl));
                }
            }

            return(View(details));
        }
Esempio n. 4
0
        [ValidateAntiForgeryToken] //用来防止CSRF跨站请求伪造
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                //根据用户名和密码查询到用户
                MyUser user = await UserManager.FindAsync(model.Name, model.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "无效的用户名或密码");
                }
                else
                {
                    var claimsIdentity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                    //将自定义声明传入到ClaimsIndentity
                    claimsIdentity.AddClaims(LocationClaimsProvider.GetClaims(claimsIdentity));
                    claimsIdentity.AddClaims(ClaimsRoles.CreateRolesFromClaims(claimsIdentity));

                    AuthManager.SignOut();
                    //AuthenticationProperties 对象和ClaimsIdentity 对象,AuthticationProperties 有众多属性,我在这儿只设置IsPersistent=true 。
                    //意味着Authentication Session 被持久化保存,当开启新Session 时,该用户不必重新验证
                    AuthManager.SignIn(new AuthenticationProperties {
                        IsPersistent = false
                    }, claimsIdentity);

                    //登录成功重定向到原请求地址
                    return(Redirect(returnUrl));
                }
            }
            ViewBag.returnUrl = returnUrl;
            return(View(model));
        }
Esempio n. 5
0
        public async Task <ActionResult> Login(LoginViewModel details, string returnUrl)
        {
            AppUser user = await UserManager.FindAsync(details.Name, details.Password);

            if (user == null)
            {
                ModelState.AddModelError("", "Некоректне ім'я або пароль.");
            }
            else
            {
                ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user,
                                                                             DefaultAuthenticationTypes.ApplicationCookie);

                //вычитать доп утверждения
                ident.AddClaims(LocationClaimsProvider.GetClaims(ident));
                //доп сконструированные утверждения
                ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));


                AuthManager.SignOut();
                AuthManager.SignIn(new AuthenticationProperties
                {
                    IsPersistent = false
                }, ident);
                return(Redirect(returnUrl));
            }

            return(View(details));
        }
        public async Task <ActionResult> LoginAsync(LoginModel details, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var userManager = HttpContext.GetAppUserManager();
                var user        = await userManager.FindAsync(details.Name, details.Password).ConfigureAwait(false);

                if (user == null)
                {
                    ModelState.AddModelError(string.Empty, "Invalid name or password");
                }
                else
                {
                    var identity =
                        await
                        userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)
                        .ConfigureAwait(false);

                    identity.AddClaims(LocationClaimsProvider.GetClaims(identity));
                    identity.AddClaims(ClaimsRoles.CreateRolesFromClaims(identity));
                    var authManager = HttpContext.GetAuthManager();
                    authManager.SignOut();
                    authManager.SignIn(new AuthenticationProperties {
                        IsPersistent = false
                    }, identity);

                    return(Redirect(returnUrl));
                }
            }

            ViewBag.ReturnUrl = returnUrl;
            return(View(details));
        }
Esempio n. 7
0
        public async Task <ActionResult> Create(CreateModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                AppUser defUser = await UserManager.FindByNameAsync("RandomUser");

                AppUser user = new AppUser
                {
                    UserName   = model.Name,
                    Email      = model.Email,
                    AvatarPath = AppDomain.CurrentDomain.BaseDirectory +
                                 "Content\\UserProfiles\\defaultAvatar.jpg",
                    AvatarImageMimeType = "image/jpeg"
                };

                IdentityResult result =
                    await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    // Назначить роль по умолчанию
                    result = await UserManager.AddToRoleAsync(user.Id, "Users");

                    if (result.Succeeded == false)
                    {
                        AddErrorsFromResult(result);
                    }

                    ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user,
                                                                                 DefaultAuthenticationTypes.ApplicationCookie);

                    ident.AddClaims(LocationClaimsProvide.GetClaims(ident));
                    ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));

                    AuthManager.SignOut();
                    AuthManager.SignIn(new AuthenticationProperties
                    {
                        IsPersistent = true
                    }, ident);
                }
                else
                {
                    AddErrorsFromResult(result);
                }
            }
            return(Redirect(returnUrl ?? "/"));
        }
Esempio n. 8
0
        public async Task <ActionResult> Login(LoginViewModel details, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                AppUser user = await UserManager.FindAsync(details.Name, details.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "Invalid name or password.");
                }
                //
                else
                {
                    //If the FindAsync method does return an AppUser object,
                    //then I need to create the cookie that the browser will send in subsequent requests to show they are authenticated. H
                    ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                    ident.AddClaims(LocationClaimsProvider.GetClaims(ident));

                    ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));

                    //I will use Email-type claim to identify users (I did this in Global.asax/Application_Start()),
                    //external authority will give me this claim
                    //but LOCAL AUTHORIRY will not, so I manually create one
                    ident.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", user.Email));

                    //invalidate any existing authentication cookies and create the new one
                    AuthManager.SignOut();
                    AuthManager.SignIn(
                        new AuthenticationProperties
                    {
                        //Keep the cookie persistent,
                        //the user doesn't have to authenticate again when starting a new session
                        IsPersistent = false
                    },
                        ident);
                    // Migrate the user's shopping cart
                    Session["CartId"] = user.UserName;
                    MigrateShoppingCart(user.UserName);
                }
            }
            ViewBag.returnUrl = returnUrl;
            return(View(details));
        }
Esempio n. 9
0
        public async Task <ActionResult> GoogleLoginCallback(string returnUrl)
        {
            ExternalLoginInfo loginInfo = await AuthManager.GetExternalLoginInfoAsync();

            AppUser user = await UserManager.FindAsync(loginInfo.Login);    //檢查user 是否為第一次登入,若為是的話則回傳null

            if (user == null)
            {
                user = new AppUser
                {
                    Email     = loginInfo.Email,
                    UserName  = loginInfo.DefaultUserName,
                    CityID    = 1,
                    CountryID = 1
                };  //為該user 創建一個新的資料存到DB
                IdentityResult result = await UserManager.CreateAsync(user);

                if (!result.Succeeded)
                {
                    return(View("Error", result.Errors));
                }
                else
                {
                    result = await UserManager.AddLoginAsync(user.Id, loginInfo.Login);

                    if (!result.Succeeded)
                    {
                        return(View("Error", result.Errors));
                    }
                }
            }

            ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user,
                                                                         DefaultAuthenticationTypes.ApplicationCookie);

            //ident.AddClaims(loginInfo.ExternalIdentity.Claims); //複製由Google 提供的Claims
            ident.AddClaims(ClaimsRoles.CreateRoleForGoogle());
            AuthManager.SignIn(new AuthenticationProperties
            {
                IsPersistent = false
            }, ident);
            return(Redirect(returnUrl ?? "/"));
        }
        public async Task <ActionResult> Login(LoginDto mLogin, string returnUrl)
        {
            //var result = _userService.Login(mLogin);
            //ViewBag.SubmitResult = (string.Format("CallBack({0},\"{1}\")", (int)result, result.ToString()));

            if (ModelState.IsValid)
            {
                User user = await UserManager.FindAsync(mLogin.UserName, mLogin.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "Invalid name or password");
                }
                else
                {
                    ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                    ident.AddClaims(LocationClaimsProvider.GetClaims(ident));
                    ident.AddClaims(ClaimsRoles.CreateRolesFromClaims(ident));
                    AuthManager.SignOut();
                    AuthManager.SignIn(new AuthenticationProperties()
                    {
                        IsPersistent = false
                    }, ident);
                    if (string.IsNullOrEmpty(returnUrl))
                    {
                        return(RedirectToAction("Index", "Home", new { area = "Front" }));
                    }
                    else
                    {
                        return(Redirect(returnUrl));
                    }
                }
            }

            ViewBag.returnUrl = returnUrl;
            return(View(mLogin));
        }