首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个账号有多种登录方式

一个账号有多种登录方式
EN

Stack Overflow用户
提问于 2016-09-26 20:51:19
回答 1查看 265关注 0票数 0

我们正在开发一个MVC5系统,它将有一个网站和一个网络应用程序接口。身份验证方法将是使用个人帐户/本地登录的asp.net身份。

网站需要标准用户名/密码登录。

Web API将通过手持设备(具有集成条形码扫描仪的Windows CE设备)使用,并且用户故事定义PIN (4-6位数字)比该设备上的复杂密码更可取。

同样的userId将有一个复杂的密码来登录网站,理想情况下还有一个个人识别码来登录手持设备。

我已经创建了一个相对简单的解决方案,当用户注册时创建2个帐户。

用户名为"MART0001“的普通用户帐户,仅在网站上接受。

用户名"MART0001_^“末尾附加了字符的辅助帐户。辅助帐户可以具有PIN密码,并且仅在从web API调用时才会被接受。

这并不理想,因为我必须放宽ApplicationUserManager PasswordValidator规则,以允许接受个人识别码,并管理我自己的复杂字符密码验证规则,以便输入主要帐户密码。

我还必须通过允许重置其中一个/两个帐户来管理忘记密码/PIN的用户。

有没有人能想到一个更优雅的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2016-09-26 21:39:43

一定。一个用户拥有两个用户帐户是不可行的。保持帐户同步将是一场噩梦,如果你能管理它的话。将pin添加为单独的列,并在提供pin时执行自定义身份验证。基本上,您只需使用类似于UserManager.FindByEmailAsync而不是UserManager.PasswordSignInAsync之类的命令来选择用户。然后,手动检查引脚是否匹配。如果是,请使用SignInManager.SignInAsync登录该用户。如果不是,则返回典型的登录失败错误消息。

当然,您应该对数据库中的pin进行散列,并将其与用户输入的pin的散列进行比较,这与处理密码的方式相同。您应该能够使用UserManager.PasswordHasher.HashPasswordUserManager.PasswordHasher.VerifyHashedPassword分别对存储在数据库中的pin进行散列处理,并验证用户输入的pin。

当pin设置为时为

代码语言:javascript
复制
user.Pin = UserManager.PasswordHasher.HashPassword(pin);

使用pin登录时的

代码语言:javascript
复制
var user = UserManager.FindByNameAsync(username);
if (user != null && UserManager.PasswordHasher.VerifyHashedPassword(user.Pin, pin))
{
    await SignInManager.SigInAsync(user, isPersistent, rememberBrowser);
    // redirect
}

// return error
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39703364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档