1+ using System . Threading . Tasks ;
2+ using AspNetCore . Jwt . Sample . Config ;
3+ using Microsoft . AspNetCore . Identity ;
4+ using Microsoft . AspNetCore . Mvc ;
5+ using Microsoft . Extensions . Options ;
6+ using NetDevPack . Identity . Jwt ;
7+ using NetDevPack . Identity . Jwt . Model ;
8+ using NetDevPack . Identity . Model ;
9+
10+ namespace AspNetCore . Jwt . Sample . Controllers
11+ {
12+ [ Route ( "api/custom-account-key" ) ]
13+ public class AuthCustomConfigAndKeyController : MainController
14+ {
15+ private readonly SignInManager < MyIntIdentityUser > _signInManager ;
16+ private readonly UserManager < MyIntIdentityUser > _userManager ;
17+ private readonly AppJwtSettings _appJwtSettings ;
18+
19+ public AuthCustomConfigAndKeyController ( SignInManager < MyIntIdentityUser > signInManager ,
20+ UserManager < MyIntIdentityUser > userManager ,
21+ IOptions < AppJwtSettings > appJwtSettings )
22+ {
23+ _signInManager = signInManager ;
24+ _userManager = userManager ;
25+ _appJwtSettings = appJwtSettings . Value ;
26+ }
27+
28+ [ HttpPost ( "register" ) ]
29+ public async Task < ActionResult > Register ( RegisterUser registerUser )
30+ {
31+ if ( ! ModelState . IsValid ) return CustomResponse ( ModelState ) ;
32+
33+ var user = new MyIntIdentityUser
34+ {
35+ UserName = registerUser . Email ,
36+ Email = registerUser . Email ,
37+ EmailConfirmed = true
38+ } ;
39+
40+ var result = await _userManager . CreateAsync ( user , registerUser . Password ) ;
41+
42+ if ( result . Succeeded )
43+ {
44+ return CustomResponse ( GetUserResponse ( user . Email ) ) ;
45+ }
46+
47+ foreach ( var error in result . Errors )
48+ {
49+ AddError ( error . Description ) ;
50+ }
51+
52+ return CustomResponse ( ) ;
53+ }
54+
55+ [ HttpPost ( "login" ) ]
56+ public async Task < ActionResult > Login ( LoginUser loginUser )
57+ {
58+ if ( ! ModelState . IsValid ) return CustomResponse ( ModelState ) ;
59+
60+ var result = await _signInManager . PasswordSignInAsync ( loginUser . Email , loginUser . Password , false , true ) ;
61+
62+ if ( result . Succeeded )
63+ {
64+ /* ANOTHER OPTIONS */
65+ var userResponse = GetUserResponse ( loginUser . Email ) ;
66+ var jwtUserClaims = GetJwtWithUserClaims ( loginUser . Email ) ;
67+ var jwtNoClaims = GetJwtWithoutClaims ( loginUser . Email ) ;
68+
69+ var fullJwt = GetFullJwt ( loginUser . Email ) ;
70+ return CustomResponse ( fullJwt ) ;
71+ }
72+
73+ if ( result . IsLockedOut )
74+ {
75+ AddError ( "This user is blocked" ) ;
76+ return CustomResponse ( ) ;
77+ }
78+
79+ AddError ( "Incorrect user or password" ) ;
80+ return CustomResponse ( ) ;
81+ }
82+
83+ private UserResponse < int > GetUserResponse ( string email )
84+ {
85+ return new JwtBuilder < MyIntIdentityUser , int > ( )
86+ . WithUserManager ( _userManager )
87+ . WithJwtSettings ( _appJwtSettings )
88+ . WithEmail ( email )
89+ . WithJwtClaims ( )
90+ . WithUserClaims ( )
91+ . WithUserRoles ( )
92+ . BuildUserResponse ( ) ;
93+ }
94+
95+ private string GetFullJwt ( string email )
96+ {
97+ return new JwtBuilder < MyIntIdentityUser , int > ( )
98+ . WithUserManager ( _userManager )
99+ . WithJwtSettings ( _appJwtSettings )
100+ . WithEmail ( email )
101+ . WithJwtClaims ( )
102+ . WithUserClaims ( )
103+ . WithUserRoles ( )
104+ . BuildToken ( ) ;
105+ }
106+
107+ private string GetJwtWithoutClaims ( string email )
108+ {
109+ return new JwtBuilder < MyIntIdentityUser , int > ( )
110+ . WithUserManager ( _userManager )
111+ . WithJwtSettings ( _appJwtSettings )
112+ . WithEmail ( email )
113+ . BuildToken ( ) ;
114+ }
115+
116+ private string GetJwtWithUserClaims ( string email )
117+ {
118+ return new JwtBuilder < MyIntIdentityUser , int > ( )
119+ . WithUserManager ( _userManager )
120+ . WithJwtSettings ( _appJwtSettings )
121+ . WithEmail ( email )
122+ . WithUserClaims ( )
123+ . BuildToken ( ) ;
124+ }
125+ }
126+ }
0 commit comments