Exemple #1
0
        public ActionResult FacebookCallback(string code)
        {
            var     fb     = new FacebookClient();
            dynamic result = fb.Post("oauth/access_token", new
            {
                client_id     = ConfigurationManager.AppSettings["FacebookAppId"],
                client_secret = ConfigurationManager.AppSettings["FacebookAppSecret"],
                redirect_uri  = RedirectUri.AbsoluteUri,
                code
            });

            var accessToken = result.access_token;

            if (!string.IsNullOrEmpty(accessToken))
            {
                fb.AccessToken = accessToken;
                // Get the user's information, like email, first name, middle name etc
                dynamic me = fb.Get("me?fields=id,name,gender,picture,email,birthday,locale");

                // Kiểm tra xem tk đã có trong csdl chưa qua facebook id
                var objAccountRsChecked = AccountBCL.CheckFacebookId(me.id);
                if (objAccountRsChecked != null)
                {
                    // Đã có trong csdl rồi
                    // Tạo session đăng nhập thành công
                    Session.Add(Comomconstants.USER_SESSION, objAccountRsChecked);

                    // Tải lại trang
                    return(RedirectToAction("Index", "Home"));
                }
                // Nếu chưa có tk, insert vào csdl đăng ký. Sau đó tạo session đăng nhập thành công
                // Đóng gói đối tượng
                var birthDay   = me.birthday;
                var objAccount = new AccountObject()
                {
                    Email       = me.email,
                    FullName    = me.name,
                    ID_Facebook = me.id,
                    Avatar      = me.picture.data.url
                };
                if (!string.IsNullOrEmpty(birthDay))
                {
                    objAccount.BirthDay = DateTime.ParseExact(birthDay, "MM/dd/yyyy", CultureInfo.InvariantCulture);
                }


                // Nếu ko lấy đc mail thì dãn đến trang cho phép nhập mail
                if (string.IsNullOrEmpty(objAccount.Email))
                {
                    ViewBag.ErrorEmail = false; // Tạm thời chưa có lỗi ở email
                    return(View("ConfirmEmail", objAccount));
                }
                // Insert tk xuống csdl
                objAccount.AccountID = Guid.NewGuid();
                // objAccount.RoleId = 100; // tk thường

                new AccountBCL().Insert(objAccount);

                // Tạo session
                Session.Add(Comomconstants.USER_SESSION, objAccount);

                // Tải lại trang
                return(RedirectToAction("Index", "Home"));
            }
            return(RedirectToAction("Index", "Home"));
        }