Я успешно построил сеть и могу развернуть ее на локальном экземпляре Hyperledger Fabric. Используя Hyperledger Composer docs здесь , у меня есть два экземпляра composer-rest-server running - один с включенной многопользовательской аутентификацией и один без, и с этой точки зрения все работает отлично.
Для сервера REST с включенной многопользовательской аутентификацией я успешно настроил провайдеров для passport-github
и другого для passport-google-oauth
, используя следующее значение для COMPOSER_PROVIDERS
:
export COMPOSER_PROVIDERS='{
"github": {
"provider": "github",
"module": "passport-github",
"clientID": "<client_id>",
"clientSecret": "<client_secret>",
"scope": "read:user,user:email",
"authPath": "/auth/github",
"callbackURL": "/auth/github/callback",
"successRedirect": "http://localhost:4200/callback",
"failureRedirect": "http://localhost:4200/login-failed"
},
"google": {
"provider": "google",
"module": "passport-google-oauth",
"strategy": "OAuth2Strategy",
"clientID": "<client_id>",
"clientSecret": "<client_secret>",
"scope": [
"https://www.googleapis.com/auth/plus.login",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile"
],
"authPath": "/auth/google",
"callbackURL": "/auth/google/callback",
"successRedirect": "http://localhost:4200/callback",
"failureRedirect": "http://localhost:4200/login-failed"
}
}'
Как видите, я указал переменную scope
в обоих провайдерах, чтобы попытаться получить электронную почту + имя пользователя из профиля пользователя. Эта информация успешно извлекается Loopback в процессе аутентификации Passport, и это здорово! Но затем composer-rest-server использует defaultCallback Loopback для процесса аутентификации, что означает, что Loopback отбрасывает всю эту информацию и выбирает только два файла cookie - access_token
и userId
. Вся информация scope
тогда, очевидно, отбрасывается и теряется навсегда.
Я могу взломать код composer-rest-server в моих node_modules /, чтобы использовать свой собственный обратный вызов аутентификации Passport для сохранения этих данных области для дальнейшего использования, но есть ли рекомендуемый способ?
Спасибо!
Мое текущее «решение» - добавить
let cb = require('../lib/custom-callback')(s, c);
c.customCallback = cb.callback();
как раз перед
passportConfigurator.configureProvider(s, c);
внутри server.js
в composer-rest-server. Затем я могу добавить свой собственный код обратного вызова в ../lib/custom-callback.js
. Но эта функциональность, кажется, не доступна из коробки.