///// <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)); }
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)); }