コード例 #1
0
ファイル: PlanListService.cs プロジェクト: MechTrigger/CCLabs
 public void SaveItem(ClaimsIdentity identity, Int32 listId, Int32 id, String text)
 {
     var userId = identity.GetUserId();
     var item = new PlanListItem() { Id = id, Text = text };
     this._repository.SaveItem(userId, listId, item);
     this._repository.SaveChanges();
 }
コード例 #2
0
ファイル: PlanListService.cs プロジェクト: MechTrigger/CCLabs
 public void SaveList(ClaimsIdentity identity, Int32 id, String name)
 {
     var userId = identity.GetUserId();
     var list = new PlanList() { Id = id, Name = name };
     this._repository.SaveList(userId, list);
     this._repository.SaveChanges();
 }
コード例 #3
0
 public void CustomIdTest()
 {
     var id = new ClaimsIdentity(
         new[]
         {
             new Claim(ClaimTypes.NameIdentifier, "3", null, ExternalAuthenticationType),
         },
         ExternalAuthenticationType);
     Assert.Equal(3, id.GetUserId<int>());
 }
コード例 #4
0
        /// <summary>
        /// This static method is setup as a delegate in Startup.Auth and will be called each time a userIdentity is created
        /// </summary>
        /// <param name="userIdentity">the ClaimsIdentity created from CRM</param>
        /// <param name="manager">the user manager used to add claims in the CRM storage</param>
        public static async Task AddCustomUserClaims(System.Security.Claims.ClaimsIdentity userIdentity, UserManager <CrmIdentityUser <string>, string> manager)
        {
            // Here you can add your custom claims to the userIdentity
            // Below is an example of how to add a custom claim:

            // Check if the customClaim has been retrieved from CRM storage
            if (!userIdentity.HasClaim("MyClaimType", "MyClaimValue"))
            {
                // Add the claim to the CRM Claim storage
                System.Security.Claims.Claim customClaim = new Claim("MyClaimType", "MyClaimValue");
                IdentityResult result = await manager.AddClaimAsync(userIdentity.GetUserId(), customClaim);

                // If all goes well, add the claim to the userIdentity. Next time the user logs in
                if (result.Succeeded)
                {
                    userIdentity.AddClaim(customClaim);
                }
                else
                {
                    // Handle the error
                }
            }
        }
コード例 #5
0
        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
            if (loginInfo == null)
            {
                return RedirectToAction("Index", "login");
            }
            //若使用者已經有登入資料,請使用此外部登入提供者登入使用者
            if (loginInfo != null)
            {
                var id = new ClaimsIdentity(loginInfo.ExternalIdentity.Claims,
                                            DefaultAuthenticationTypes.ApplicationCookie);

                Session["Account"] = id.GetUserId();
                Session["uname"] = loginInfo.DefaultUserName; //取得用戶名稱
                Session["resAccount"] = loginInfo.Login.LoginProvider;//取得用戶來源

                //var resourceAccount = loginInfo.Login.LoginProvider; 
                //TODO: 驗證邏輯,註冊會員邏輯    
                Member m = new Member();
                MemberData md = new MemberData();
                if (Session["Account"] != null)
                {
                    var memberData = md.Get().ToList().Where(a => a.uAccount == Session["Account"].ToString()).SingleOrDefault();
                    if (memberData == null)
                    {
                        m.uAccount = Session["Account"].ToString();
                        m.uName = loginInfo.DefaultUserName;
                        m.wdate = DateTime.Now;
                        m.udate = DateTime.Now;
                        m.uPassWord = "******";
                        m.uphone = "";
                        m.memberID = DateTime.Now.ToString("yyyyMMdd") + (md.Get().Count + 1).ToString().PadLeft(3, '0');
                        m.isdel = 0;
                        m.sort = 5000;
                        switch (loginInfo.Login.LoginProvider)
                        {
                            case "Facebook":
                                m.FacebookId = id.GetUserId();
                                m.GoogleId = "";
                                m.uemail = loginInfo.Email ?? "";
                                break;
                            case "Google":
                                m.FacebookId = "";
                                m.GoogleId = id.GetUserId();
                                m.uemail = loginInfo.Email;
                                break;
                            default:
                                m.FacebookId = "";
                                m.GoogleId = "";
                                m.uemail = "";
                                break;
                        }


                        md.Create(m);
                        TempData["Congu"] = "已成為會員";
                    }

                }

                //End: 加上你的驗證邏輯,或是註冊會員邏輯
                AuthenticationManager.SignIn(id);

                return RedirectToLocal(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "login");
            }


            // 若使用者已經有登入資料,請使用此外部登入提供者登入使用者
            //var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
            //switch (result)
            //{
            //    case SignInStatus.Success:
            //        return RedirectToLocal(returnUrl);
            //    case SignInStatus.LockedOut:
            //        return View("Lockout");
            //    case SignInStatus.RequiresVerification:
            //        return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
            //    case SignInStatus.Failure:
            //    default:
            //        // 若使用者沒有帳戶,請提示使用者建立帳戶
            //        ViewBag.ReturnUrl = returnUrl;
            //        ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
            //        return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
            //}
        }
コード例 #6
0
ファイル: PlanListService.cs プロジェクト: MechTrigger/CCLabs
 public PlanListViewModel GetListById(ClaimsIdentity identity, Int32 id)
 {
     var userId = identity.GetUserId();
     var list = this._repository.Get(userId, id);
     return Mapper.Map<PlanListViewModel>(list);
 }
コード例 #7
0
ファイル: PlanListService.cs プロジェクト: MechTrigger/CCLabs
 public IList<PlanListViewModel> GetAllLists(ClaimsIdentity identity)
 {
     var userId = identity.GetUserId();
     var lists = this._repository.GetAll(userId);
     return Mapper.Map<IList<PlanListViewModel>>(lists);
 }
コード例 #8
0
ファイル: PlanListService.cs プロジェクト: MechTrigger/CCLabs
 public void DeleteList(ClaimsIdentity identity, Int32 id)
 {
     var userId = identity.GetUserId();
     this._repository.DeleteList(userId, id);
     this._repository.SaveChanges();
 }
コード例 #9
0
        private async Task<ClaimsIdentity> RemoveExternalClaims(ClaimsIdentity userIdentity, string loginProvider) {
            var currentClaims = await UserManager.GetClaimsAsync(userIdentity.GetUserId());
            foreach (var providerClaim in AuthenticationManager.User.Claims.Where(c => c.Type.StartsWith("urn:" + loginProvider.ToLower()))) {
                if (!providerClaim.Type.StartsWith("http://schemas.xmlsoap.org/ws/2005/05/identity/claims")) {
                    if (userIdentity.HasClaim(c => c.Type == providerClaim.Type)) {

                        if (userIdentity.HasClaim(c => c.Type == providerClaim.Type)) {
                            var toRemoveClaim = userIdentity.Claims.FirstOrDefault(c => c.Type == providerClaim.Type);
                            if (toRemoveClaim != null) {
                                userIdentity.RemoveClaim(toRemoveClaim);
                            }
                        }

                        // remove from database
                        var currentClaim = currentClaims.FirstOrDefault(c => c.Type == providerClaim.Type);
                        if (currentClaim != null)
                            await UserManager.RemoveClaimAsync(userIdentity.GetUserId(), currentClaim);
                    }
                }
            }
            return userIdentity;
        }
コード例 #10
0
        private async Task<ClaimsIdentity> StoreExternalClaims(ClaimsIdentity userIdentity) {
            ClaimsIdentity externalIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
            if (externalIdentity != null) {
                var currentClaims = await UserManager.GetClaimsAsync(userIdentity.GetUserId());
                foreach (var claim in externalIdentity.Claims) {
                    if (!claim.Type.StartsWith("http://schemas.xmlsoap.org/ws/2005/05/identity/claims")) {

                        if (userIdentity.HasClaim(c => c.Type == claim.Type && c.Issuer.Contains("LOCAL"))) {
                            var toRemoveClaim = userIdentity.Claims.FirstOrDefault(c => c.Type == claim.Type && c.Issuer.Contains("LOCAL"));
                            if (toRemoveClaim != null) {
                                userIdentity.RemoveClaim(toRemoveClaim);
                            }
                        }

                        if (!userIdentity.HasClaim(claim.Type, claim.Value)) {
                            // Add to claims
                            userIdentity.AddClaim(claim);

                            // Remove current claim
                            var currentClaim = currentClaims.FirstOrDefault(c => c.Type == claim.Type);
                            if (currentClaim != null)
                                await UserManager.RemoveClaimAsync(userIdentity.GetUserId(), currentClaim);

                            // Store claim to database
                            await UserManager.AddClaimAsync(userIdentity.GetUserId(), claim);
                        }
                    }
                }
            }

            return userIdentity;
        }
コード例 #11
0
 public void NoIdReturnsDefaultValue()
 {
     var id = new ClaimsIdentity();
     Assert.Equal(0, id.GetUserId<int>());
 }