Ответ 1
Чтобы войти в систему через DDP, просто отправьте вызов метода. Вы немного изменяете его в зависимости от того, как вы хотите войти.
Я буду использовать ddp-tools, чтобы попытаться объяснить, как войти в систему, поскольку это будет общение с чисто ddp. Детали входа в приведенные ниже примеры:
Имя пользователя user_1, пароль qwerty (да, я знаю его плохо), а адрес электронной почты [email protected], токен входа MxNY9BFPKra2uNWG7
Формат
ddp call <method call name> [<param1>..]
То же самое, что и делать ddpclient.call(<method call name>,<param1>,callback)
в nodejs
Чтобы войти в систему с помощью электронной почты и пароля
ddp call 'login' '{"password":"qwerty","user":{"email":"[email protected]"}}'
Чтобы войти в систему с именем пользователя и паролем
ddp call 'login' '{"password":"qwerty","user":{"username":"user_1"}}'
Чтобы войти в систему с токеном (какой метеорит сохраняется при входе в систему:
ddp call 'login' '{"resume":"MxNY9BFPKra2uNWG7"}'
-
Трудный: SRP
Если вы не хотите отправлять пароль в виде обычного текста, как описано выше, вы не используете SSL-защищенное/https-соединение, которое вы можете использовать SRP.
Чтобы войти в систему с SRP, это немного сложнее, поскольку у нее есть несколько этапов.
1. Begin a passwordExchange to establish the key to communicate the hash
2. Send a login call with the hash calculated using the reply from 1)
Шаг 1:
-Begin обмен паролями SRP:
ddp call 'beginPasswordExchange' '{"A":"A","user":{"email":"[email protected]"}}
Ответ будет выглядеть как
{"identity":"identity","salt":"salt","B":B"}
Затем вы можете использовать это для входа:
ddp call 'login' '{"srp":{"M":"srp hash"}}'
Аналогичным образом вы можете использовать имя пользователя вместо указанного выше сообщения.
Итак, чтобы получить значения M, и A вам нужна библиотека SRP. Поскольку в meteor есть библиотека SRP, ее легко объяснить, как получить пароль от каждого, это довольно сложно. Если вы хотите написать один на другом языке, вы можете использовать описание wikipedia для создания методов
Итак, мы начинаем обмен srp (из библиотеки SRP в пакете SRS meteors), поскольку вы используете node.js, вы можете включить все файлы в свой проект (за исключением package.js)
var srp = new SRP.Client(password);
Это даст вам A
, после чего вы получите данные, которые вы можете ответить:
var response = srp.respondToChallenge(result);
Это, наконец, даст вам SHA-хэш, чтобы ответить с помощью "M", взяв "B" и соль.
Наконец
Не забудьте проверить окончательный ответ, когда вы входите в систему, чтобы узнать, соответствует ли результат тому, что должно быть
srp.verifyConfirmation({HAMK: result.HAMK}
Снова все это из библиотеки SRP в Meteor, но все они являются частью спецификации SRP, как на wikipedia. Meteor SRP использует SHA256 в качестве функции хеширования.
Примеры:
- Node JS - https://github.com/emgee3/srp-test