Skip to content

Commit a9b8589

Browse files
committed
add qq oauth
1 parent 304d989 commit a9b8589

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

src/Meowv.Blog.Api/appsettings.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ authorize:
7272
redirectUrl: 'https://admin.meowv.com/oauth/weibo'
7373
scope: 'all'
7474
qq:
75-
clientId: '101931838'
75+
clientId: '101935194'
7676
clientSecret: ''
77-
redirectUrl: 'https://api.meowv.com/api/meowv/oauth/qq/token'
77+
redirectUrl: 'https://admin.meowv.com/oauth/qq'
7878
scope: 'get_user_info'

src/Meowv.Blog.Application/Authorize/OAuth/Impl/OAuthQQService.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ public override async Task<User> GetUserByOAuthAsync(string type, string code, s
2424
var accessToken = await GetAccessTokenAsync(code, state);
2525
var userInfo = await GetUserInfoAsync(accessToken);
2626

27-
return await UserService.CreateUserAsync(userInfo.Email, type, userInfo.Id, userInfo.Name, userInfo.Avatar, userInfo.Email);
27+
return await UserService.CreateUserAsync(userInfo.Name, type, userInfo.Id, userInfo.Name, userInfo.Avatar, userInfo.Email);
2828
}
2929

3030
public override async Task<AccessTokenBase> GetAccessTokenAsync(string code, string state)
3131
{
3232
var param = BuildAccessTokenParams(code, state);
33-
Options.Value.AccessTokenUrl = $"{Options.Value.AccessTokenUrl}?{param.ToQueryStringWithEncode()}";
33+
Options.Value.AccessTokenUrl = $"{Options.Value.AccessTokenUrl}?{param.ToQueryString()}";
3434

3535
using var client = HttpClient.CreateClient();
3636
var response = await client.GetStringAsync(Options.Value.AccessTokenUrl);
@@ -47,12 +47,17 @@ public override async Task<QQUserInfo> GetUserInfoAsync(AccessTokenBase accessTo
4747
{
4848
using var client = HttpClient.CreateClient();
4949

50-
var openIdResponse = await client.GetStringAsync($"{Options.Value.OpenIdUrl}?access_token={accessToken.AccessToken}");
51-
50+
var openIdResponse = await client.GetStringAsync($"{Options.Value.OpenIdUrl}?access_token={accessToken.AccessToken}&fmt=json");
51+
var openId = openIdResponse.DeserializeToObject<QQOpenId>().OpenId;
52+
53+
var param = BuildUserInfoParams(accessToken.AccessToken, openId);
54+
Options.Value.UserInfoUrl = $"{Options.Value.UserInfoUrl}?{param.ToQueryString()}";
5255

5356
var response = await client.GetStringAsync(Options.Value.UserInfoUrl);
5457

5558
var userInfo = response.DeserializeToObject<QQUserInfo>();
59+
userInfo.Id = openId;
60+
5661
return userInfo;
5762
}
5863

@@ -80,5 +85,15 @@ protected Dictionary<string, string> BuildAccessTokenParams(string code, string
8085
["state"] = state
8186
};
8287
}
88+
89+
protected Dictionary<string, string> BuildUserInfoParams(string accessToken, string openId)
90+
{
91+
return new Dictionary<string, string>()
92+
{
93+
["access_token"] = accessToken,
94+
["oauth_consumer_key"] = Options.Value.ClientId,
95+
["openid"] = openId,
96+
};
97+
}
8398
}
8499
}
Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
1-
namespace Meowv.Blog.Dto.Authorize
1+
using Newtonsoft.Json;
2+
3+
namespace Meowv.Blog.Dto.Authorize
24
{
3-
public class QQUserInfo : UserInfoBase
5+
public class QQUserInfo
46
{
7+
public string Id { get; set; }
8+
9+
[JsonProperty("nickname")]
10+
public string Name { get; set; }
11+
12+
[JsonProperty("figureurl_qq")]
13+
public string Avatar { get; set; }
14+
15+
public string Email { get; set; } = "";
16+
}
17+
18+
public class QQOpenId
19+
{
20+
[JsonProperty("openid")]
21+
public string OpenId { get; set; }
522
}
623
}

0 commit comments

Comments
 (0)