using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using New_College.AuthHelper.OverWrite; using New_College.Common; using New_College.Common.Helper; using New_College.IServices; using New_College.Model; using New_College.Model.ViewModels; using NPOI.SS.Formula.Functions; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace New_College.Controllers { [AllowAnonymous] [Route("api/oauth")] public class OauthController : Controller { readonly IV_CustomerInfoServices _CustomerInfoServices; public OauthController(IV_CustomerInfoServices v_CustomerInfoServices) { _CustomerInfoServices = v_CustomerInfoServices; } /// /// Oauth2验证回调 /// /// /// /// /// [HttpGet] [Route("callback")] public async Task> Callback(string code, string state, string scope) { var response = new CasDoorToken(); string jwtStr = string.Empty; bool suc = false; var getaccesstoken = CasdoorHttpHelper.Http_Post("api/login/oauth/access_token",null, new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(new CasdoorRequest() { code = code, grant_type = "authorization_code", client_id = CasdoorConfig.ClientId, client_secret = CasdoorConfig.ClientSecret }), Encoding.UTF8, "application/json"));//获取access_token var headers = new System.Collections.Generic.Dictionary { { "Authorization", string.Format("Bearer {0}", getaccesstoken.access_token) } }; if (getaccesstoken.access_token == null) { return new MessageModel() { msg = "code已失效", success = false }; } response.servicetoken = getaccesstoken.access_token; var userinfo = CasdoorHttpHelper.Http_Get("/api/userinfo", headers, new Dictionary()); var user = await _CustomerInfoServices.GetUserInfo(new Model.Request.LoginQuery() { openId = userinfo.sub }); if (user != null) { if (user.Item1) { if (string.IsNullOrEmpty(user.Item2.NickName)) { var single = await _CustomerInfoServices.QueryById(user.Item2.Id); if (!string.IsNullOrWhiteSpace(user.Item2.Phone)) { single.NickName= user.Item2.Phone; } if (!string.IsNullOrWhiteSpace(user.Item2.UserCode)) { single.NickName = user.Item2.UserCode; } await _CustomerInfoServices.Update(single); } TokenModelJwt tokenModel = new TokenModelJwt { Uid = user.Item2.Id, Role = "users" }; jwtStr = JwtHelper.IssueJwt(tokenModel); response.token = jwtStr; response.Id = user.Item2.Id; suc = true; } else { return new MessageModel() { success = false, msg="该账户不存在或已注销" }; } } return new MessageModel() { success = suc, msg = suc ? "success" : "fail", response = response }; } } }