You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现软删除账号登录时的「该账号已删除」提示功能

解决已删除账号登录提示问题

看起来你的核心需求是:当用户使用已软删除(IsActive=2)的账号登录时,前端显示「this login is deleted」的提示。目前你的代码逻辑存在一些可以优化的地方,我来帮你调整:

后端(user.controller.cs)逻辑修正

首先,我们先明确状态定义,让判断逻辑更清晰:

  • IsActive = 0:账号正常可用
  • IsActive = 1:账号被禁用
  • IsActive = 2:账号已软删除

调整后的代码如下:

[Route("api/Users/Login")]
[ResponseType(typeof(object))]
public async Task<object> accountLogin(string name, string password)
{
    string pwd = Encrypt(password);
    Users account = db.Users.FirstOrDefault(c => c.userlogin == name && c.password == pwd);
    string message = "";

    if (account == null)
    {
        message = "404"; // 用户名或密码错误
    }
    else if (account.IsActive == 2)
    {
        message = "500"; // 账号已删除
    }
    else if (account.IsActive == 1)
    {
        message = "400"; // 账号被禁用
    }
    else if (account.IsActive == 0)
    {
        message = JsonConvert.SerializeObject(account); // 返回正常用户信息
    }
    else
    {
        message = "500"; // 处理未知状态,默认返回删除提示
    }

    return new { a = message };
}

优化点说明:

  • 用FirstOrDefault简化了LINQ查询代码,更简洁高效
  • 调整判断顺序:先检查账号是否存在,再判断已删除状态,接着是禁用状态,最后是正常状态,符合登录校验的优先级逻辑
  • 把复杂的(account.IsActive !=0) && (account.IsActive !=1)替换成明确的account.IsActive ==2,避免逻辑歧义,后期维护也更方便

前端(login.controller.js)逻辑优化

你的前端逻辑大体没问题,但可以让跳转判断更严谨,同时完善加载状态的处理:

$scope.login = function () {
    $scope.loading = true;
    authService.login($scope.userlogin)
        .then(function done(response) {
            console.log(response);
            if (response.a == '400') {
                $scope.error = 'account disabled';
                $scope.loading = false;
            } else if (response.a == '500') {
                $scope.error = 'this login is deleted';
                $scope.loading = false;
            } else if (response.a == '404') {
                console.log("login or password incorrect");
                $scope.error = 'login or password incorrect';
                $scope.loading = false;
            } else {
                // 只有当返回的是用户对象时,才跳转到仪表盘
                console.log("bbb");
                $location.url('Dashboard');
                $scope.loading = false;
            }
        }, function fail(err) {
            $scope.error = 'Problem in connection ! contact administrator';
            console.log(err);
            $scope.loading = false;
        });
}

优化点说明:

  • 调整判断顺序,先处理所有错误码(400、500、404),最后处理正常登录的情况,逻辑更直观
  • 给fail回调也加上$scope.loading = false,避免登录失败后加载状态一直停留
  • 把原来的条件判断简化为else,因为前面已经排除了所有错误情况,更严谨

这样调整后,当用户使用已删除的账号登录时,后端会返回500,前端就会正确显示「this login is deleted」的提示了。

内容的提问来源于stack exchange,提问作者adem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:53