예제 #1
0
        public void Login()
        {
            response = new OpenIdRelyingParty().GetResponse();

            if (response == null)
            {
                var request = new OpenIdRelyingParty().CreateRequest(Url);

                request.AddExtension
                (
                    new ClaimsRequest()
                    {
                        Email = DemandLevel.Require,
                        Language = DemandLevel.Require,
                        TimeZone = DemandLevel.Require,
                        Country = DemandLevel.Require,
                        BirthDate = DemandLevel.Require,
                        PostalCode = DemandLevel.Require,
                        Gender = DemandLevel.Require,
                        Nickname = DemandLevel.Require,
                        FullName = DemandLevel.Require
                    }
                );
                request.RedirectToProvider();

            } else if (response != null && response.Status == AuthenticationStatus.Authenticated)
            {
                IsAuthenticated = true;
                //基本
                var claimResponse = response.GetExtension<ClaimsResponse>();

                User = new NTPCLibrary.User();
                User.Identity = response.ClaimedIdentifier.ToString().Split('/').Last();

                User.Departments = new List<Department>();
                if (claimResponse != null)
                {
                    User.ID = claimResponse.PostalCode;
                    User.FullName = claimResponse.FullName;
                    User.NickName = claimResponse.Nickname;
                    User.Email = claimResponse.Email;
                    User.Gender = claimResponse != null ? (claimResponse.Gender.Equals(Gender.Male) ? "男" : "女") : string.Empty;
                    User.BirthDate = claimResponse.BirthDate;
                    User.SchoolName = claimResponse.Country;
                    User.ClassRoom = claimResponse.Language;
                    User.Departments = JsonConvert.DeserializeObject<List<Department>>(claimResponse.TimeZone);
                }

                //延伸
                FetchResponse fetchResponse = response.GetExtension<FetchResponse>();

                User.AXExtension = fetchResponse != null ? GetAx(fetchResponse) : "無";

                //寫入Cookie
                Util.SetCookie<User>(OPENID_COOKIE, User, CookieDomain, true);
            }
        }