Meteor 1.0 — Пользовательские правила аутентификации

У меня есть метеорное приложение, которое использует Neo4j в качестве базы данных с драйвером neo4jreactivity. Поскольку я не использую Mongo, Meteor.loginWithPassword(email, password, function(err) {...}) не работает. Мой вопрос:

Как определить пользовательское правило аутентификации для входа в приложение?

вроде как:

customLogin(email, password, function() {...});

person ameernuri    schedule 08.02.2015    source источник


Ответы (2)


Для этого можно использовать метод Accounts.registerLoginHandler. Эта функция позволяет разработчикам добавлять собственные методы аутентификации. Посетите https://meteorhacks.com/extending-meteor-accounts.html, чтобы отличная статья с более подробной информацией.

Скорее всего, вы захотите продолжать использовать loginWithPassword и зарегистрируете loginHandler, аналогичный тому, который содержится в пакете учетных записей Meteor (см. реализация Meteor), где вызов Meteor.users.findOne(selector) заменен поиском в базе данных в Neo4j.

Если вы хотите использовать собственный метод входа, ваш код может выглядеть примерно так, как код из здесь (изменено для целей этого вопроса). Обратите внимание, что этот код не является полным и не является безопасным средством аутентификации:

// client-side

// This function can be called to log in your users, and will
// trigger the following
Meteor.loginWithNeo4j = function(email, password, callback) {
    //create a login request with the email and password passed in
  var loginRequest = {email: email, password: password};
  
  //send the login request
  Accounts.callLoginMethod({
    methodArguments: [loginRequest],
    userCallback: callback
  }); 
};  

// server-side

Accounts.registerLoginHandler(function(loginRequest) {
  // loginRequest is a JS object that will have properties
  // "email" and "password as passed in the client  code
  
  // -- here you can write code to fetch the user's ID from the database
 // take a look at https://github.com/meteor/meteor/blob/devel/packages/accounts-password/password_server.js#L61
 // to see how meteor handles password checking
  
  return {
    userId: userId
  }
});

Пакет учетных записей в целом имеет много зависимостей от MongoDB, но вы должны иметь возможность собрать воедино различные методы из пакета, чтобы заставить авторизацию работать.

person Sid    schedule 09.02.2015
comment
Я делаю что-то подобное, но я хотел бы вернуть больше информации из моего пользовательского обработчика входа в систему... скажем, у меня есть полное имя пользователя, хранящееся во внешней службе, и я хотел бы вернуть его для отображения на клиент... есть идеи? - person Wes; 01.05.2015

Чтобы получить объект пользователя, используйте:

Meteor.neo4j.query('MATCH (a:Player {_id: "kE3ypH4Um"}) RETURN a').get().a[0]
/* or by email */
Meteor.neo4j.query('MATCH (a:Player {email: "[email protected]"}) RETURN a').get().a[0]

См. также обновленный API драйвера.

person dr.dimitru    schedule 26.09.2015