【问题标题】:How to make authorization using SQLite , MVVM in C#如何在 C# 中使用 SQLite、MVVM 进行授权
【发布时间】:2021-02-21 08:37:45
【问题描述】:

我有 2 个独立的项目,注册和登录主窗口,我绑定到同一个 SQLite 文件。 用户注册一切都很好,但现在我需要登录能够正常工作。如何从BD中提取用户并使用MVVM检查该用户是否存在以及密码是否一致?

我开始创建 2 个类

public class ServiceResult
{
    public bool IsSucceed { get; set; }
    public string Error { get; set; }
    public ServiceResult()
    {
        IsSucceed = true;
    }

    public ServiceResult(string error)
    {
        IsSucceed = false;
        Error = error;
    }
}

public class AuthorizationService
{

    public ServiceResult Login(string login,string password)
    {
        ApplicationDbContext db= new ApplicationDbContext();
        return new ServiceResult();
    }
}

我的注册视图模型

public class RegisterViewModel : BaseViewModel
{
    Hashing hashing = new Hashing();
    ApplicationDbContext db;
    private string name;
    public string Name
    {
        get => name;
        set
        {
            name = value;
            OnPropertyChanged(nameof(Name));
        }
    }
    private string lastName;
    public string LastName
    {
        get => lastName;
        set
        {
            lastName = value;
            OnPropertyChanged(nameof(LastName));
        }
    }
    private string login;
    public string Login
    {
        get => login;
        set
        {
            login = value;
            OnPropertyChanged(nameof(Login));
        }
    }

    private string password;
    public string Password
    {
        get { return password; }
        set
        {
            if (password != value)
            {
                password = value;
                OnPropertyChanged("Password");
            }
        }
    }
    private string mail;
    public string Mail
    {
        get => mail;
        set
        {
            mail = value;
            OnPropertyChanged(nameof(Mail));
        }
    }



    public ICommand Command { get; set; }

    private RelayCommand registerCommand;
    public RelayCommand RegisterCommand
    {
        get
        {
            return registerCommand ??
                (registerCommand = new RelayCommand(() =>
                {
                    var _user = new RegisterUser(Name, LastName, Login, hashing.Encrypt(Password), Mail);
                    db.Users.Add(_user);
                    db.SaveChanges();
                }));
        }
    }

    public ObservableCollection<User> Users { get; set; }
    public RegisterViewModel()
    {
        db = new ApplicationDbContext();
    }
}

这是登录视图模型

 ApplicationDbContext db;
    IEnumerable<User> users;

    public LoginViewModel(IViewFactory viewFactory, ICore core) : base(viewFactory)
    {
        db = new ApplicationDbContext();
    }

    public ICommand Command { get; set; }

    private string login;
    public string Login
    {
        get => login;
        set
        {
            login = value;
            RaisePropertyChanged(nameof(Login));
        }
    }
    private string password;
    public string Password
    {
        get => password;
        set
        {
            password = value;
            RaisePropertyChanged(nameof(Password));
        }
    }

    private RelayCommand addCommand;
    public RelayCommand AddCommand
    {
        get
        {
            return addCommand ??
                (addCommand = new RelayCommand(() =>
                {
                }));
        }
    }

    public IEnumerable<User> Users
    {
        get { return users; }
        set
        {
            users = value;
            RaisePropertyChanged("Users");
        }
    }
}

【问题讨论】:

    标签: c# wpf sqlite mvvm


    【解决方案1】:

    我完成了,这很容易)

    public class AuthorizationService
    {
        ApplicationDbContext db = new ApplicationDbContext();
        public ServiceResult Login(string login,string password)
        {
            var listUsers= db.Users.ToList();
            foreach (var item in listUsers)
            {
                if (item.Login == login || item.Password == password)
                {
                    return new ServiceResult();
                }
            }
            return new ServiceResult("Wrong Login or Password!");
        }
    }
    

    和登录视图模型

    private RelayCommand loginUser;
        public RelayCommand LoginUser
        {
            get
            {
                return loginUser ??
                    (loginUser = new RelayCommand(() =>
                    {
                        var result = _authorizationService.Login(Login, hashing.Encrypt(Password));
                    }));
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多