在一项服务中,我编写了一个简单的函数来获取特定用户的租户ID
[AbpAuthorize]
public int? FindTenancyNameByUserNameOrEmail(string userNameOrEmail)
{
var qry = (from p in _memberRepository.GetAll()
where p.UserName == userNameOrEmail || p.EmailAddress == userNameOrEmail
select p).FirstOrDefault();
if (qry != null)
{
return qry.TenantId;
}
else
{
throw new Exception("User not found");
}
}
我从帐户控制器的登录功能调用此功能。
public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "", string returnUrlHash = "")
{
var tenancyid = _memberAppService.FindTenancyNameByUserNameOrEmail(loginModel.UsernameOrEmailAddress.Trim());
//bla bla code
}
我收到以下错误:
抛出异常:&#39; Abp.Authorization.AbpAuthorizationException&#39;在 Abp.dll
其他信息:当前用户未登录该应用程序!
答案 0 :(得分:1)
问题出在第一行
var qry = (from p in _memberRepository.GetAll()
.GetAll()函数创建此错误,因为您无法在linq查询中使用Builtin函数。
改为使用
var Myvariable = _memberRepository.GetAll().ToList();
var qry = (from p in Myvariable where p.UserName == userNameOrEmail || p.EmailAddress == userNameOrEmail select p).FirstOrDefault();
答案 1 :(得分:1)
问题是用户不属于租户。
使用以下行设置租户ID和代码。
CurrentUnitOfWork.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, intTenancyId);
将[AbpAllowAnonymous]
属性添加到服务方法
答案 2 :(得分:1)
问题是AbpAuthorize属性 [AbpAuthorize] 将其删除。