创建非oauth Meteor Accounts包

Ben*_*nRH 5 authentication meteor

account-foobar包都依赖于基于oauth的身份验证系统,并且涉及相当多的令人困惑的,无证件的样板.我想知道是否有一种简单的方法可以为非oauth身份验证系统创建一个包,该系统将与Meteor帐户系统正常集成.我想到的非oauth系统是一个简单的外部API,只接受用户名和密码,并返回一个带有成功数据或错误的简单json对象.

有一个简单的方法吗?Meteor是否提供了我错过的API?

编辑:这个位工作正常,我只是不完全确定如何将其连接到帐户系统:

HTTP.post('https://my-site.com/api/login.json', { params: { username: 'foo', password: 'bar' } }, function (error, result) {
    if (result) console.log('User data:', result.data);
});

// User data: { userId: 217, username: "foobar" }
Run Code Online (Sandbox Code Playgroud)

小智 4

看起来 Meteor 的帐户密码包应该适合你(基于简单的用户名/密码的身份验证),但是如果你需要自定义的东西,你可以自己做。

如果您不想使用任何内置的 account-* 包,您可以推出自己的 auth 包。您只需注册自己的登录处理程序并进行一些簿记即可在重新连接时保持会话经过身份验证。

一步步:

1:添加accounts-base包:meteor add accounts-base

2:在服务器上,添加 Accounts.registerLoginHandler 调用

Accounts.registerLoginHandler(function(loginRequest) {
  // ... check loginRequest for proper credentials - up to you 
  var userId = something; // determined by the credentials check

  // add a resume token so that Meteor can resume your session on reconnect
  var stampedToken = Accounts._generateStampedLoginToken();
  Meteor.users.update(session.user, 
    {$push: {'services.resume.loginTokens': stampedToken}});

  return {
    id: userId,
    token: stampedToken.token
  });
Run Code Online (Sandbox Code Playgroud)

3:客户端调用登录

var loginRequest = { ... your auth credentials ... };
Accounts.callLoginMethod({
  methodArguments: [loginRequest],
  userCallback: function (err) {
      if (!err) {  ... do stuff here on successful login ...  }
  }});
Run Code Online (Sandbox Code Playgroud)

就是这样!