Получить эту ошибку auth / operation-not-поддерживается-in-this-environment с помощью экспресс-узлаjs - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю с Firebase в своем проекте, но получаю эту ошибку auth/operation-not-supported-in-this-environment при входе с учетными данными Google.

.hbs код файла

<span class="google-bg session-icon">
  <a href="#!" id="google" onclick=" return loginWithGoogle(this)">
      <i class="ti-google"></i>
   </a>
</span>

код сценария

function loginWithGoogle(event){
  $.ajax({
    url: "/session/google/login",
       type: "POST"
    })
    .done(function (data) {
    error= JSON.stringify(data);
    console.log(error);
    M.toast({html: error})
 });
}

Экспресс-код

router.post('/session/google/login',function (req, res, next){
   //console.log('get resqust');
   firebase.auth().signInWithRedirect(googleAuthProvider).then(function(result){
       console.log(result);
   }, function(error){
      console.log(error.code);
      res.json({
         data: error.code
      })
   });   
})

Когда я нажимаю на иконку Google, затем вызываю loginWithGoogle функцию и получаю путь к маршрутизатору /session/google/login, после этого выполняем экспресс-код и генерируем ошибку.Мне интересно решить эту проблему и что может быть не так?

Спасибо !!!

Обновлено (16-10-18)

Маршрут вызова на панели мониторинга после успешного входа в систему с учетной записью Gmail.

router.get('/dashboard', function(req, res, next) {
      console.log(firebase.auth().currentUser);
      if(firebase.auth().currentUser != null){
         res.render('dashboard', { 
            title: 'App'
         });
      }else {
      req.session.error = 'Access denied!';
      console.log(req.session.error);
      res.redirect('/login');
   }
}); 

После успешного входа в систему на учетной записи gmail у меня есть маршрут вызова панели управления и используется условие перед отображением страницы панели мониторинга, но currentUser возвращает ноль.Я проверил в консоли Firebase, которая показывает недавно новый логин пользователя с помощью gmail, и если у меня логин с простым идентификатором пользователя и паролем, то currentUser возвращает данные.где я не прав ??

Обновлено 17-10-18

function loginWithGoogle(event) {
    firebase.initializeApp(config);
    var provider = new firebase.auth.GoogleAuthProvider();
    firebase.auth().signInWithPopup(googleAuthProvider)
       .then(function (user) {
           // localStorage.setItem('user',JSON.stringify(user));
           window.location.href = '/dashboard'; 
        })
        .catch(function (error) {
            var errorCode = error.code;
            var errorMessage = error.message;
            var email = error.email;
            var credential = error.credential
        })
    }

После успешного входа в систему я перенаправил на '/dashboard' и определил маршрут, определенный для вызова, для панели мониторинга.который я упомянул вчера.теперь, пожалуйста, скажите мне, где я называю приборную панель маршрута ??

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Перед тем, как начать, убедитесь, что вы добавили Firebase в свой интерфейс, если вы еще этого не сделали, вот инструкции, как это сделать: https://firebase.google.com/docs/web/setup

Вход в Google выполняется в интерфейсеи это довольно просто, вам не нужно менять HTML-код, только JavaScript, как показано ниже, и не нужно вызывать облачные функции

function loginWithGoogle(event){
  var provider = new firebase.auth.GoogleAuthProvider();
  firebase.auth().signInWithRedirect(provider);
}

Это только один из случаев использования при входе с помощью перенаправления,есть вход с всплывающим окном и более сложная обработка входа, которую можно попробовать после того, как вы заставите этот работать: https://firebase.google.com/docs/auth/web/google-signin

Для аутентифицированных вызовов к вашим облачным функциям вы должны сначала получить токен изатем позвоните.Но вы можете сделать это только после того, как уже выполнили вход.

function authenticatedCallToFunctions(event){
  firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
    $.ajax({
        url: "someurl",
        type: "POST",
        headers: {"firebase-token": idToken}
      })
      .done(function (data) {
        error= JSON.stringify(data);
        console.log(error);
        M.toast({html: error})
      });
  }).catch(function(error) {
    // Handle error
  });
}

И вы можете обработать свой аутентифицированный запрос в облачных функциях, таких как

import * as admin from 'firebase-admin';

router.post('someurl',function (req, res, next){
  var token = req.headers['firebase-token'];

  admin.auth().verifyIdToken(token).then(function(result){
      console.log(result);
  }, function(error){
     console.log(error.code);
     res.json({
        data: error.code
     })
  });
})
0 голосов
/ 28 сентября 2018

Firebase Authentication SDK для JavaScript работает только в браузере, а не в среде node.js.Если вам нужно работать с Firebase Auth на вашем бэкэнде, вам нужно будет использовать Firebase Admin SDK , который вы можете использовать для управления пользовательскими сеансами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...