环回密码迁移:使用旧的系统密码登录或自动创建新密码



我的系统使用简单的php/mysql arquitecture运行。

我目前正在使用环回创建一个新的RESTapi,它将通过angular/ionic应用程序访问。我假装使用环回身份验证系统,但我不知道如何重用我的旧系统登录名/密码,而不是为每个旧用户注册一个新用户。

就我所想,可能有两种方式:

  • 使用存储在我现有用户中的登录/老式散列密码值(覆盖环回散列密码)。

  • 当用户登录到现有系统时,使用现有凭据自动创建新的环回用户。(这个选项要求用户在使用新api之前至少登录一次旧系统…对我来说没关系)

这两个选项对我来说都很好,因为我的用户将继续对旧系统和新系统使用相同的凭据。

但我不知道怎么能在环回中做到这一点。

成功实现了第一个选项:覆盖环回验证密码功能。

1-我在数据库中创建了一个新的userLoopback表,使用loopback User模型。(我无法使用我现有的表,因为没有属性名与环回表匹配,我不想把它搞砸。一个小脚本将所需的数据从现有的用户表复制到新的userLoopback表中)。

2-我在构建用户模型的基础上创建了一个新的环回模型。

有overdivr说,你必须在JS中有相同的哈希方法才能成功匹配存储的密码。

就是这样…

用于创建表的SQL:

CREATE TABLE `userLoopback` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`realm` varchar(512) DEFAULT NULL,
`username` varchar(512) DEFAULT NULL,
`password` varchar(512) NOT NULL,
`credentials` text,
`challenges` text,
`email` varchar(512) NOT NULL,
`emailVerified` tinyint(1) DEFAULT NULL,
`verificationToken` varchar(512) DEFAULT NULL,
`status` varchar(512) DEFAULT NULL,
`created` datetime DEFAULT CURRENT_TIMESTAMP,
`lastUpdated` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1211 DEFAULT CHARSET=latin1;

userloopback.js

module.exports = function(UserLoopback) {
UserLoopback.prototype.hasPassword = function ( plain, fn ) {
fn = fn || utils.createPromiseCallback();
var user = this;
if ( this.password ===   \ hashed plain password \ ) {
return fn(null, true);
}
return fn(null, false);
};
};

最新更新