2016-11-27 57 views
0
我有困难调用登录方法

,它遵循流星:callLoginMethod未找到错误

$ meteor list 
Accounts-base 1.2.14 A user account system 
Ecmascript 0.6.1 Compiler plugin that supports ES2015 + in all .js files 
Meteor-base 1.0.4 Packages that every Meteor app needs 
React 15.0.1 Everything you need to use React with Meteor. 
Static-html 1.1.13 Defines static page content in .html files 

/server/main.js

import { Accounts } from 'meteor/accounts-base' 

Accounts.registerLoginHandler('simples', (ttt) => { 
    console.log(ttt); 
}); 

/client/main.js

autenticar(){ 
    Accounts.callLoginMethod({ 
    methodName: 'simples', 
    methodArguments: [{ tipo : 'simples' }], 
    validateResult: function (result) { 
    console.log('result', result); 
    }, 
    userCallback: function(error) { 
     if (error) { 
     console.log('error', error); 
     } 
    } 
    }) 
} 

当调用authenticar()时,出现此错误:

errorClass 
  Details: undefined 
  Error: 404 
  ErrorType: "Meteor.Error" 
  Message: "Method 'simples' not found [404]" 
  Reason: "Method 'simples' not found" 

错误在哪里?

回答

2

我从来没有亲自使用过这个API,但是通过流星内部的快速浏览,我发现了一些问题。

​​仅向内置处理程序数组添加了附加处理程序,该处理程序作为默认Meteor登录过程的一部分被调用。

如果你想在一个额外的处理程序插入到现有的过程中,你应该叫Accounts.callLoginMethod没有methodName关键。

调用Accounts.callLoginMethodmethodName将完全绕过内置的处理程序,并与您的自定义的方法替换它们,但是这种方法需要单独由你Meteor.methods,不registerLoginHandler声明。

所以,这可能是你的错误 - 你需要用Meteor.methods定义你的simples方法。此外,你应该检查该方法的要求的代码,看到这里的代码中的注释:

https://github.com/meteor/meteor/blob/devel/packages/accounts-base/accounts_client.js

1

只有以补充和保持为别人到这里转介。这样,它的工作

client.js

Accounts.callLoginMethod({ 
    methodArguments: [{tipo: 'simples'}], 
    validateResult: (result) => { 
    console.log('success', result); 
    }, 
    userCallback: function(error) { 
    if (error) { 
     console.log('error', error); 
    } 
    } 
}); 

server.js

Meteor.startup(function() { 
    var config = Accounts.loginServiceConfiguration.findOne({ 
    service : 'simples' 
    }); 
    if (!config) { 
    Accounts.loginServiceConfiguration.insert({ service: 'simples' }); 
    } 
}); 

Accounts.registerLoginHandler((opts) => { 
    if(opts.tipo === 'simples'){ 
    return Accounts.updateOrCreateUserFromExternalService ('simples', { 
     id: 0 // need define something 
    }, { 
     options : 'optional' 
    }) 
    } 
});