"当前用户未登录该应用程序!"从服务调用函数时出错

时间:2017-03-22 12:08:58

标签: asp.net asp.net-mvc boilerplate asp.net-boilerplate

在一项服务中,我编写了一个简单的函数来获取特定用户的租户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

     

其他信息:当前用户未登录该应用程序!

3 个答案:

答案 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] 将其删除。