Использование функции Google с Node-express-passport - PullRequest
0 голосов
/ 08 января 2019

Я использовал стратегию «паспорт-твиттер», и так получилось, что я не вижу окна «паспорт-логин» на стороне клиента, когда выполняю стратегию

Так вот что я делаю, изначально

class Auth extends ParentClass {
  constructor(context, options) {
    super() 
    this.app.get('/callback/:service', (req, res) => 
    this.callbackEndpoint(req,res))
    this.app.get('/', (req, res, next) => this.loginEndpoint(req, res, next))
}

  async loginEndpoint (req, res, next) {
      if (req.query.Twitter) {
        console.log(`Inside Twitter Authentication`)
        passport.authenticate('twitter', { scope : ['email'] })(req,res,next);
      }

}

где в моем ParentClass я более или менее инициализирую вещи

class ParentClass {
   this.use(corsMiddleware(options.CORS_URLS))
    this.use(bodyParser.json())
    this.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: true,
      cookie: { secure: true }
    }))
    this.use(passport.initialize())
    this.use((passport.session()))
}

use (middleware) {
    this.app.use(middleware)
  }
}

И, наконец, это моя паспортная стратегия

passport.use(new TwitterStrategy({
    consumerKey: functions.config().twitterCredentials.apikey,
    consumerSecret: functions.config().twitterCredentials.apiSecretKey,
    callbackURL: redirect_uri,
    passReqToCallback: true
  }, async (req, accessToken, refreshToken, params, profile, done) => {
      console.log(`logging from Passport Twitter ${req.workspace, req.accessToken}`)
        done()
}))

Из первого кода, сниппета, я вижу журнал Inside Twitter Authentication, но после этого ничего не происходит.

Чего я ожидал? Появляется окно для входа в твиттер, но ничего не появляется, и через некоторое время я получаю в консоли информацию: Execution took 569847 ms, finished with status: 'timeout'

Итак, вот мои вопросы: 1. Можем ли мы использовать паспорт и обычный поток данных с google-функциями? (просто прокомментируйте, если не ответите) 2. Если да, можем ли мы найти ошибку в приведенном выше коде.

Обновление примечания: Пока я гуглял по своей проблеме, я наткнулся на этот старый вопрос и понял, что хотя он был несколько похож, но описание предыдущего было очень расплывчатым. Позднее сегодня я задал похожий вопрос, но решил объединить его с этим.

1 Ответ

0 голосов
/ 12 апреля 2019

В первой части вашего кода вам нужно передать passport.authenticate непосредственно в обработчик get. Как это:

class Auth extends ParentClass {
  constructor(context, options) {
    super() 
    this.app.get('/callback/:service', (req, res) => 
    this.callbackEndpoint(req,res))
    this.app.get('/', passport.authenticate('twitter', { scope : ['email'] })(req,res,next))
  }
}

Я предполагаю, что это "приложение" смонтировано по какому-либо пути, например / auth / twitter

В вашем интерфейсе вы открываете всплывающее окно с URL-адресом, указывающим на / auth / twitter. Примерно так:

<button onclick="oauthPrompt('twitter')">Login with Twitter</button>
<script>
    function oauthPrompt(service) {
      const url = '/auth/' + service
      var newWindow = window.open(url, 'name', 'height=600,width=450')
      if (window.focus) {
        newWindow.focus();
      }
    }

</script>
...