public IActionResult LoginByLine(string returnUrl) { string clientId = config.Line.ClientId; string clientSecret = config.Line.ClientSecret; string redirectUrl = config.Line.Callback; //string state = "0000"; string state = returnUrl == null ? "" : Uri.EscapeDataString(returnUrl); string authUrl = new LineLoginClient(clientId, clientSecret, redirectUrl).GetAuthUrl(state); return(Redirect(authUrl)); }
public IActionResult LineCallback(string code, string state, string error) { LineUser lineUser; try { string clientId = config.Line.ClientId; string clientSecret = config.Line.ClientSecret; string redirectUrl = config.Line.Callback; LineLoginClient lineMgr = new LineLoginClient(clientId, clientSecret, redirectUrl); IUserService userSrv = Ioc.Get <IUserService>(); TokenResponse tokenData = lineMgr.GetToken(code).Result; if (tokenData == null) { return(NotFound()); } lineUser = lineMgr.GetLineUser(tokenData.AccessToken).Result; if (lineUser == null || string.IsNullOrEmpty(lineUser.UserId)) { return(Content("Error to login by Line.")); } Member mem = userSrv.GetMember(lineUser.UserId); string accessToken; if (mem == null) { mem = new Member { Name = lineUser.UserId, DisplayName = lineUser.DisplayName, Picture = lineUser.PictureUrl, Status = MemberStatus.Invalice, }; bool success = userSrv.SaveMember(mem, out accessToken); } else { accessToken = mem.AccessToken; userSrv.UpdateMember(mem.Name); } if (mem.Status == MemberStatus.Invalice) { return(Content("你沒有通過認證,請在Line上跟 unicorn 說一下。")); } if (string.IsNullOrEmpty(accessToken) == false) { userSrv.ForceLogin(Response, accessToken, config.Login.CookieDays); } //line private var friendshipStatus = lineMgr.GetFriendshipStatus(tokenData.AccessToken).Result; if (string.IsNullOrEmpty(state) == false) { return(Redirect(state)); } } catch (Exception ex) { logger.Error("Line callback失敗.", ex); throw; } return(Content("Line: " + JsonConvert.SerializeObject(lineUser))); //return Content("Line User: "******" / " + friendshipStatus.FriendFlag); }