Current User
is the main service to get info about the current active user.
Example: Injecting the ICurrentUser
into a service:
Common base classes have already injected this service as a base property. For example, you can directly use the CurrentUser
property in an :
Here are the fundamental properties of the ICurrentUser
interface:
- IsAuthenticated (bool): Returns
true
if the current user has logged in (authenticated). If the user has not logged in thenId
andUserName
returnsnull
. - Id (Guid?): Id of the current user. Returns
null
, if the current user has not logged in. - UserName (string): User name of the current user. Returns
null
, if the current user has not logged in. - TenantId (Guid?): Tenant Id of the current user, which can be useful for a multi-tenant application. Returns
null
, if the current user is not assigned to a tenant. - Email (string): Email address of the current user.Returns
null
, if the current user has not logged in or not set an email address. - EmailVerified (bool): Returns
true
, if the email address of the current user has been verified. - PhoneNumber (string): Phone number of the current user. Returns
null
, if the current user has not logged in or not set a phone number. - Roles (string[]): Roles of the current user. Returns a string array of the role names of the current user.
is implemented on the ICurrentPrincipalAccessor
(see the section below) and works with the claims. So, all of the above properties are actually retrieved from the claims of the current authenticated user.
- FindClaim: Gets a claim with the given name. Returns
null
if not found. - FindClaims: Gets all the claims with the given name (it is allowed to have multiple claim values with the same name).
- GetAllClaims: Gets all the claims.
- IsInRole: A shortcut method to check if the current user is in the specified role.
Beside these standard methods, there are some extension methods:
- FindClaimValue: Gets the value of the claim with the given name, or
null
if not found. It has a generic overload that also casts the value to a specific type. - GetId: Returns
Id
of the current user. If the current user has not logged in, it throws an exception (instead of returningnull
) . Use this only if you are sure that the user has already authenticated in your code context.
ICurrentUser
works independently of how the user is authenticated or authorized. It seamlessly works with any authentication system that works with the current principal (see the section below).
ICurrentPrincipalAccessor
is the service that should be used (by the ABP Framework and your application code) whenever the current principal of the current user is needed.
For a web application, it gets the User
property of the current HttpContext
. For a non-web application, it returns the Thread.CurrentPrincipal
.
Current principal is not something you want to set or change, except at some advanced scenarios. If you need it, use the Change
method of the ICurrentPrincipalAccessor
. It takes a ClaimsPrincipal
object and makes it “current” for a scope.
Example:
Use the Change
method always in a using
statement, so it will be restored to the original value after the using
scope ends.
This can be a way to simulate a user login for a scope of the application code, however try to use it carefully.
AbpClaimTypes
is a static class that defines the names of the standard claims and used by the ABP Framework.
- Other properties, like
EmailVerified
,PhoneNumber
,TenantId
… are defined by the ABP Framework by following the standard names wherever possible.