Skip to content

Commit 9a733da

Browse files
committed
Converted Web.Mvc project to netcoreapp1.1
1 parent ddd6ff0 commit 9a733da

File tree

9 files changed

+135
-132
lines changed

9 files changed

+135
-132
lines changed

aspnet-core/src/AbpCompanyName.AbpProjectName.Core/Authorization/LoginManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Abp.Authorization;
2-
using Abp.Authorization.Roles;
32
using Abp.Authorization.Users;
43
using Abp.Configuration;
54
using Abp.Configuration.Startup;
@@ -16,7 +15,8 @@ namespace AbpCompanyName.AbpProjectName.Authorization
1615
{
1716
public class LogInManager : AbpLogInManager<Tenant, Role, User>
1817
{
19-
public LogInManager(AbpUserManager<Role, User> userManager,
18+
public LogInManager(
19+
UserManager userManager,
2020
IMultiTenancyConfig multiTenancyConfig,
2121
IRepository<Tenant> tenantRepository,
2222
IUnitOfWorkManager unitOfWorkManager,

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Core/AbpCompanyName.AbpProjectName.Web.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
</ItemGroup>
2727

2828
<ItemGroup>
29+
<PackageReference Include="System.ValueTuple" Version="4.3.0" />
2930
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.1" />
3031
<PackageReference Include="Microsoft.AspNetCore.Authentication.Facebook" Version="1.1.1" />
3132
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="1.1.1" />
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Security.Claims;
4+
using Abp.Extensions;
5+
6+
namespace AbpCompanyName.AbpProjectName.Identity
7+
{
8+
public class ExternalLoginInfoHelper
9+
{
10+
public static (string name, string surname) GetNameAndSurnameFromClaims(List<Claim> claims)
11+
{
12+
string name = null;
13+
string surname = null;
14+
15+
var givennameClaim = claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName);
16+
if (givennameClaim != null && !givennameClaim.Value.IsNullOrEmpty())
17+
{
18+
name = givennameClaim.Value;
19+
}
20+
21+
var surnameClaim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname);
22+
if (surnameClaim != null && !surnameClaim.Value.IsNullOrEmpty())
23+
{
24+
surname = surnameClaim.Value;
25+
}
26+
27+
if (name == null || surname == null)
28+
{
29+
var nameClaim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name);
30+
if (nameClaim != null)
31+
{
32+
var nameSurName = nameClaim.Value;
33+
if (!nameSurName.IsNullOrEmpty())
34+
{
35+
var lastSpaceIndex = nameSurName.LastIndexOf(' ');
36+
if (lastSpaceIndex < 1 || lastSpaceIndex > (nameSurName.Length - 2))
37+
{
38+
name = surname = nameSurName;
39+
}
40+
else
41+
{
42+
name = nameSurName.Substring(0, lastSpaceIndex);
43+
surname = nameSurName.Substring(lastSpaceIndex);
44+
}
45+
}
46+
}
47+
}
48+
49+
return (name, surname);
50+
}
51+
}
52+
}

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Mvc/AbpCompanyName.AbpProjectName.Web.Mvc.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,13 @@
2626
</ItemGroup>
2727

2828
<ItemGroup>
29-
<ProjectReference Include="..\AbpCompanyName.AbpProjectName.Application\AbpCompanyName.AbpProjectName.Application.csproj" />
3029
<ProjectReference Include="..\AbpCompanyName.AbpProjectName.Web.Core\AbpCompanyName.AbpProjectName.Web.Core.csproj" />
3130
</ItemGroup>
3231

3332
<ItemGroup>
3433
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0">
3534
<PrivateAssets>All</PrivateAssets>
3635
</PackageReference>
37-
<PackageReference Include="Swashbuckle" Version="6.0.0-beta902" />
3836
<PackageReference Include="AspNet.Security.OpenIdConnect.Server" Version="1.0.0-beta6-final" />
3937
<PackageReference Include="PaulMiami.AspNetCore.Mvc.Recaptcha" Version="1.2.0" />
4038
<PackageReference Include="Castle.LoggingFacility.MsLogging" Version="2.0.0" />

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Mvc/Controllers/AccountController.cs

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,18 @@
1717
using Abp.Timing;
1818
using Abp.UI;
1919
using Abp.Web.Models;
20-
using Abp.Zero.AspNetCore;
2120
using Abp.Zero.Configuration;
2221
using Microsoft.AspNetCore.Mvc;
2322
using AbpCompanyName.AbpProjectName.Authorization;
2423
using AbpCompanyName.AbpProjectName.MultiTenancy;
2524
using AbpCompanyName.AbpProjectName.Web.Models.Account;
2625
using AbpCompanyName.AbpProjectName.Authorization.Users;
2726
using AbpCompanyName.AbpProjectName.Controllers;
27+
using AbpCompanyName.AbpProjectName.Identity;
2828
using AbpCompanyName.AbpProjectName.Sessions;
29-
using AbpCompanyName.AbpProjectName.Web.Identity;
3029
using AbpCompanyName.AbpProjectName.Web.Startup;
3130
using AbpCompanyName.AbpProjectName.Web.Views.Shared.Components.TenantChange;
32-
using Microsoft.AspNet.Identity;
31+
using Microsoft.AspNetCore.Identity;
3332

3433
namespace AbpCompanyName.AbpProjectName.Web.Controllers
3534
{
@@ -94,39 +93,26 @@ public ActionResult Login(string userNameOrEmailAddress = "", string returnUrl =
9493
[UnitOfWork]
9594
public virtual async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "", string returnUrlHash = "")
9695
{
97-
var loginResult = await GetLoginResultAsync(loginModel.UsernameOrEmailAddress, loginModel.Password, GetTenancyNameOrNull());
98-
99-
await SignInAsync(loginResult.User, loginResult.Identity, loginModel.RememberMe);
100-
await UnitOfWorkManager.Current.SaveChangesAsync();
101-
102-
if (string.IsNullOrWhiteSpace(returnUrl))
103-
{
104-
returnUrl = GetAppHomeUrl();
105-
}
106-
96+
returnUrl = NormalizeReturnUrl(returnUrl);
10797
if (!string.IsNullOrWhiteSpace(returnUrlHash))
10898
{
10999
returnUrl = returnUrl + returnUrlHash;
110100
}
111101

102+
var loginResult = await GetLoginResultAsync(loginModel.UsernameOrEmailAddress, loginModel.Password, GetTenancyNameOrNull());
103+
104+
await _signInManager.SignInAsync(loginResult.Identity, loginModel.RememberMe);
105+
await UnitOfWorkManager.Current.SaveChangesAsync();
106+
112107
return Json(new AjaxResponse { TargetUrl = returnUrl });
113108
}
114109

115110
public async Task<ActionResult> Logout()
116111
{
117-
await HttpContext.Authentication.SignOutAsync(AuthConfigurer.AuthenticationScheme);
112+
await _signInManager.SignOutAsync();
118113
return RedirectToAction("Login");
119114
}
120115

121-
private async Task SignInAsync(User user, ClaimsIdentity identity = null, bool rememberMe = false)
122-
{
123-
if (identity == null)
124-
{
125-
identity = await _userManager.CreateIdentityAsync(user, AuthConfigurer.AuthenticationScheme);
126-
}
127-
128-
await _signInManager.SignOutAllAndSignInAsync(identity, rememberMe);
129-
}
130116

131117
private async Task<AbpLoginResult<Tenant, User>> GetLoginResultAsync(string usernameOrEmailAddress, string password, string tenancyName)
132118
{
@@ -173,10 +159,10 @@ public async Task<ActionResult> Register(RegisterViewModel model)
173159
{
174160
try
175161
{
176-
ExternalLoginUserInfo externalLoginInfo = null;
162+
ExternalLoginInfo externalLoginInfo = null;
177163
if (model.IsExternalLogin)
178164
{
179-
externalLoginInfo = await _signInManager.GetExternalLoginUserInfo(model.ExternalLoginAuthSchema);
165+
externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync();
180166
if (externalLoginInfo == null)
181167
{
182168
throw new ApplicationException("Can not external login!");
@@ -208,8 +194,8 @@ public async Task<ActionResult> Register(RegisterViewModel model)
208194
if (model.IsExternalLogin)
209195
{
210196
Debug.Assert(externalLoginInfo != null);
211-
212-
if (string.Equals(externalLoginInfo.EmailAddress, model.EmailAddress, StringComparison.InvariantCultureIgnoreCase))
197+
198+
if (string.Equals(externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email), model.EmailAddress, StringComparison.OrdinalIgnoreCase))
213199
{
214200
user.IsEmailConfirmed = true;
215201
}
@@ -218,8 +204,8 @@ public async Task<ActionResult> Register(RegisterViewModel model)
218204
{
219205
new UserLogin
220206
{
221-
LoginProvider = externalLoginInfo.LoginInfo.LoginProvider,
222-
ProviderKey = externalLoginInfo.LoginInfo.ProviderKey,
207+
LoginProvider = externalLoginInfo.LoginProvider,
208+
ProviderKey = externalLoginInfo.ProviderKey,
223209
TenantId = user.TenantId
224210
}
225211
};
@@ -237,7 +223,7 @@ public async Task<ActionResult> Register(RegisterViewModel model)
237223
AbpLoginResult<Tenant, User> loginResult;
238224
if (externalLoginInfo != null)
239225
{
240-
loginResult = await _logInManager.LoginAsync(externalLoginInfo.LoginInfo, tenant.TenancyName);
226+
loginResult = await _logInManager.LoginAsync(externalLoginInfo, tenant.TenancyName);
241227
}
242228
else
243229
{
@@ -246,7 +232,7 @@ public async Task<ActionResult> Register(RegisterViewModel model)
246232

247233
if (loginResult.Result == AbpLoginResultType.Success)
248234
{
249-
await SignInAsync(loginResult.User, loginResult.Identity);
235+
await _signInManager.SignInAsync(loginResult.Identity, false);
250236
return Redirect(GetAppHomeUrl());
251237
}
252238

@@ -300,60 +286,60 @@ public ActionResult ExternalLogin(string provider, string returnUrl)
300286
[UnitOfWork]
301287
public virtual async Task<ActionResult> ExternalLoginCallback(string returnUrl, string authSchema, string remoteError = null)
302288
{
289+
returnUrl = NormalizeReturnUrl(returnUrl);
290+
303291
if (remoteError != null)
304292
{
305293
Logger.Error("Remote Error in ExternalLoginCallback: " + remoteError);
306294
throw new UserFriendlyException(L("CouldNotCompleteLoginOperation"));
307295
}
308296

309-
var tenancyName = GetTenancyNameOrNull();
310-
311-
var userInfo = await _signInManager.GetExternalLoginUserInfo(authSchema);
312-
313-
if (userInfo.LoginInfo == null || userInfo.LoginInfo.LoginProvider.IsNullOrEmpty() || userInfo.LoginInfo.ProviderKey.IsNullOrEmpty())
297+
var externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync(authSchema);
298+
if (externalLoginInfo == null)
314299
{
315-
Logger.Warn("Could not get LoginProvider and ProviderKey from external login.");
316-
return RedirectToAction("Login");
300+
Logger.Warn("Could not get information from external login.");
301+
return RedirectToAction(nameof(Login));
317302
}
318303

319-
await HttpContext.Authentication.SignOutAsync(AuthConfigurer.ExternalAuthenticationScheme);
304+
await _signInManager.SignOutAsync();
305+
306+
var tenancyName = GetTenancyNameOrNull();
320307

321-
var loginResult = await _logInManager.LoginAsync(userInfo.LoginInfo, tenancyName);
308+
var loginResult = await _logInManager.LoginAsync(externalLoginInfo, tenancyName);
322309

323310
switch (loginResult.Result)
324311
{
325312
case AbpLoginResultType.Success:
326-
await SignInAsync(loginResult.User, loginResult.Identity, true);
327-
328-
if (string.IsNullOrWhiteSpace(returnUrl))
329-
{
330-
returnUrl = GetAppHomeUrl();
331-
}
332-
313+
await _signInManager.SignInAsync(loginResult.Identity, false);
333314
return Redirect(returnUrl);
334315
case AbpLoginResultType.UnknownExternalLogin:
335-
return await RegisterForExternalLogin(userInfo);
316+
return await RegisterForExternalLogin(externalLoginInfo);
336317
default:
337318
throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(
338319
loginResult.Result,
339-
userInfo.EmailAddress ?? userInfo.LoginInfo.ProviderKey,
320+
externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email) ?? externalLoginInfo.ProviderKey,
340321
tenancyName
341322
);
342323
}
343324
}
344325

345-
private async Task<ActionResult> RegisterForExternalLogin(ExternalLoginUserInfo userInfo)
326+
private async Task<ActionResult> RegisterForExternalLogin(ExternalLoginInfo externalLoginInfo)
346327
{
328+
var email = externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email);
329+
var nameinfo = ExternalLoginInfoHelper.GetNameAndSurnameFromClaims(externalLoginInfo.Principal.Claims.ToList());
330+
347331
var viewModel = new RegisterViewModel
348332
{
349-
EmailAddress = userInfo.EmailAddress,
350-
Name = userInfo.Name,
351-
Surname = userInfo.Surname,
333+
EmailAddress = email,
334+
Name = nameinfo.name,
335+
Surname = nameinfo.surname,
352336
IsExternalLogin = true,
353-
ExternalLoginAuthSchema = userInfo.LoginInfo.LoginProvider
337+
ExternalLoginAuthSchema = externalLoginInfo.LoginProvider
354338
};
355339

356-
if (userInfo.HasAllNonEmpty())
340+
if (nameinfo.name != null &&
341+
nameinfo.surname != null &&
342+
email != null)
357343
{
358344
return await Register(viewModel);
359345
}
@@ -417,6 +403,26 @@ private string GetTenancyNameOrNull()
417403
return _tenantCache.GetOrNull(AbpSession.TenantId.Value)?.TenancyName;
418404
}
419405

406+
private string NormalizeReturnUrl(string returnUrl, Func<string> defaultValueBuilder = null)
407+
{
408+
if (defaultValueBuilder == null)
409+
{
410+
defaultValueBuilder = GetAppHomeUrl;
411+
}
412+
413+
if (returnUrl.IsNullOrEmpty())
414+
{
415+
return defaultValueBuilder();
416+
}
417+
418+
if (Url.IsLocalUrl(returnUrl))
419+
{
420+
return returnUrl;
421+
}
422+
423+
return defaultValueBuilder();
424+
}
425+
420426
#endregion
421427

422428
#region Etc
@@ -448,6 +454,5 @@ await _notificationPublisher.PublishAsync(
448454
}
449455

450456
#endregion
451-
452457
}
453458
}

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Mvc/Identity/SignInManager.cs

Lines changed: 0 additions & 29 deletions
This file was deleted.

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Mvc/Startup/AbpProjectNameWebMvcModule.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Reflection;
22
using Abp.Modules;
3-
using Abp.Zero.AspNetCore;
43
using AbpCompanyName.AbpProjectName.Configuration;
54
using Microsoft.AspNetCore.Hosting;
65
using Microsoft.Extensions.Configuration;
@@ -21,8 +20,6 @@ public AbpProjectNameWebMvcModule(IHostingEnvironment env)
2120

2221
public override void PreInitialize()
2322
{
24-
Configuration.Get<IAbpZeroAspNetCoreConfiguration>().AuthenticationScheme = AuthConfigurer.AuthenticationScheme;
25-
2623
Configuration.Navigation.Providers.Add<AbpProjectNameNavigationProvider>();
2724
}
2825

0 commit comments

Comments
 (0)