我的系统使用简单的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);
};
};