Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }