Exemplo n.º 1
0
        ///// <summary>
        ///// 取得Line會員資料
        ///// </summary>
        ///// <param name="lineAuthorize"></param>
        ///// <returns></returns>
        //public LineProfile GetLineAccount(LineAuthorizeModel lineAuthorize)
        //{
        //    LineLoginProjectSetting lineSetting;
        //    if (true)
        //    {
        //        lineSetting = _line.LineLogin.RightTY;
        //    }
        //    LineTokenModel lineTokenModel = GetLineAccountToken(lineAuthorize, lineSetting);
        //    HttpClientHelper<LineProfile> httpClientHelper = new HttpClientHelper<LineProfile>(_httpClientFactory);
        //    httpClientHelper.SetHeaders("Authorization", "Bearer " + lineTokenModel.Access_Token);
        //    return httpClientHelper.SendAsync(HttpMethod.Get, lineSetting.Profile.ProfileUri.ToString());
        //}

        /// <summary>
        /// 取得Line會員Access_Token
        /// </summary>
        /// <param name="facebookOauth">FacebookOauthModel</param>
        /// /// <param name="facebookSetting">FacebookLoginProject</param>
        /// <returns></returns>
        public FacebookTokenModel GetFacebookAccountToken(FacebookOauthModel facebookOauth)
        {
            FacebookLoginProjectSetting facebookSetting = _facebook.FacebookLogin.RightTY;
            Dictionary <string, string> dic             = new Dictionary <string, string>()
            {
                { "client_id", facebookSetting.ClientId },
                { "redirect_uri", facebookSetting.Token.RedirectUri.ToString() },
                { "client_secret", facebookSetting.ClientSecret },
                { "code", facebookOauth.Code }
            };
            HttpClientHelper <FacebookTokenModel> httpClientHelper = new HttpClientHelper <FacebookTokenModel>(_httpClientFactory);
            FacebookTokenModel facebookTokenModel = httpClientHelper.SendAsync(HttpMethod.Get, facebookSetting.Token.TokenUri.ToString(), dic);

            return(facebookTokenModel);
        }
        public HttpResponseMessage Post(FacebookTokenModel model)
        {
            string token;

            try
            {
                token = _facebookService.ExtendToken(model.Token);
            }
            catch (BadRequestException e)
            {
                ModelState.AddModelError("Token", e.Message);
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            var response = new FacebookToken {
                Token = token
            };

            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
Exemplo n.º 3
0
        public ActionResult FacebookLoginCallback(string state, string code)
        {
            if (string.IsNullOrEmpty(state) || state != SessionManager.FBstate)
            {
                return(ErrorPage());
            }

            string        returnUrl   = SessionManager.ReturnUrl;
            List <string> exceptRoute = new List <string> {
                "FacebookLoginCallback", "Confirm"
            };

            if (exceptRoute.Any(x => returnUrl.Contains(x)))
            {
                returnUrl = "";
            }

            SessionManager.ReturnUrl     = "";
            SessionManager.FBstate       = "";
            SessionManager.ExternalLogin = null;

            string errorMessage = "", successMessage = "";
            var    tokenModel = new FacebookTokenModel();
            var    userModel  = new FacebookUserModel();
            var    loginModel = new LoginViewModel();

            //1.取得access_token
            string url = "https://graph.facebook.com/v3.1/oauth/access_token?"
                         + "client_id=" + ApplicationHelper.ApiKey.FacebookAppId
                         + "&client_secret=" + ApplicationHelper.ApiKey.FacebookAppSecret
                         + "&redirect_uri=" + RouteHelper.BaseUrl() + Url.Action("FacebookLoginCallback", "Member")
                         + "&code=" + code;

            try
            {
                var request  = (HttpWebRequest)WebRequest.Create(url);
                var response = (HttpWebResponse)request.GetResponse();
                var reader   = new StreamReader(response.GetResponseStream());

                string jsonStr = reader.ReadToEnd().ToString();
                tokenModel = _Json.JsonToModel <FacebookTokenModel>(jsonStr);

                reader.Close();
                response.Close();
            }
            catch (Exception)
            {
                errorMessage = "無法取得Facebook存取權";
            }

            //2.取得使用者資訊
            if (string.IsNullOrEmpty(errorMessage))
            {
                try
                {
                    url = "https://graph.facebook.com/me?fields=id,name,email&access_token=" + tokenModel.access_token;

                    var request  = (HttpWebRequest)WebRequest.Create(url);
                    var response = (HttpWebResponse)request.GetResponse();
                    var reader   = new StreamReader(response.GetResponseStream());

                    var jsonStr = reader.ReadToEnd().ToString();
                    userModel = _Json.JsonToModel <FacebookUserModel>(jsonStr);

                    reader.Close();
                    response.Close();
                }
                catch (Exception)
                {
                    errorMessage = "取得Facebook使用者錯誤";
                }
            }

            //3.Login/SignUp
            if (string.IsNullOrEmpty(errorMessage))
            {
                var model = new ExternalLoginViewModel
                {
                    ExternalType = ExternalType.Facebook,
                    ExternalKey  = userModel.id,
                    UserName     = userModel.name,
                    Email        = userModel.email
                };

                //FB新註冊, 一律先到確認頁 > 送出驗證Email
                if (!service.ExistExternalLogin(model))
                {
                    SessionManager.ExternalLogin = model;
                    return(RedirectToAction("SignUp", model));
                }

                //可外部登入
                loginModel = new LoginViewModel
                {
                    Account   = userModel.id,
                    LoginType = LoginType.Facebook
                };
            }

            return(LoginHelper(loginModel, returnUrl, errorMessage, successMessage));
        }