Exemple #1
0
        public async Task <ActionResult> LoginGoogle(CancellationToken cancellationToken)
        {
            var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).
                         AuthorizeAsync(cancellationToken);

            if (result.Credential == null)
            {
                return(new RedirectResult(result.RedirectUri));
            }

            var plusService = new PlusService(new BaseClientService.Initializer
            {
                HttpClientInitializer = result.Credential,
                ApplicationName       = "MvcLogin App"
            });

            // Lấy thông tin cơ bản của user
            var me = plusService.People.Get("me").Execute();

            if (me != null)
            {
                // Kiểm tra xem tk đã có trong csdl chưa qua google id
                var objAccountRsChecked = AccountBCL.CheckGoogleId(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 objAccount = new AccountObject()
                {
                    Email    = me.Emails.ElementAt(0).Value,
                    FullName = me.Name.GivenName + " " + me.Name.FamilyName,
                    ID_Gmail = me.Id,
                    Avatar   = me.Image.Url
                };
                //string DisplayName = me.DisplayName;
                //string Provider = IdentityProvider.Google;

                // Insert tk xuống csdl
                objAccount.AccountID = Guid.NewGuid();
                //objAccount.RoleId = 3; // tk thường
                //objAccount.ModifiedTime = DateTime.Now;
                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"));
        }