3

我基于 Polymer Starter Kit 创建了一个 Firebase 项目,并进行了一些修改以修复路由,但登录弹出窗口立即关闭并记录错误:

在完成操作之前,用户已关闭弹出窗口。

在此处输入图像描述

调用该_authenticate函数(在下面的代码中)来验证用户。我能够在 Facebook 和 Google 控制台上正确设置它,所以我不确定错误的含义。

这是我的代码:

<dom-module id="my-app">
  <template>
    
    !-- Firebase Setup -->
    <firebase-app auth-domain="foodhop-manage.firebaseapp.com"
                  database-url="https://foodhop-manage.firebaseio.com"
                  api-key="AIzaSyA-1TEbd1EhlkPwjGBLNS74h3c5FNCHNo0"></firebase-app>

    <!-- Firebase Authentication -->
    <firebase-auth id="auth"
                    user="{{user}}"
                    signed-in="{{signedIn}}"
                    on-error="handleError"></firebase-auth>

    <!-- App Routing -->
    <app-location route="{{route}}"></app-location>
    <app-route
        route="{{route}}"
        pattern="/:page"
        data="{{routeData}}"
        tail="{{subroute}}"></app-route>

    <!-- Scroll Position Control -->
    <app-scrollpos-control id="scrollpos" selected="[[page]]" reset></app-scrollpos-control>

    <!-- Application -->
    <app-header-layout>
      <app-header condenses reveals shadow>
        <app-toolbar>
          <div main-title style="text-align:center;font-size:40px;padding-top:20px" class="font-beautify">FoodHop</div>
        </app-toolbar>
        <app-toolbar sticky>
          <div class="flex"></div>
          <paper-tabs selected="[[page]]" attr-for-selected="name" class="self-end">
            <paper-tab link name="about">
              <a href="/about" class="link" tabindex="-1">About</a>
            </paper-tab>
            <paper-tab link name="register" hidden$="[[signedIn]]">
              <a href="/register" class="link" tabindex="-1">Register</a>
            </paper-tab>
            <paper-tab link name="login">
              <a href="/login" class="link" tabindex="-1">Login</a>
            </paper-tab>
          </paper-tabs>
          <div class="flex"></div>
        </app-toolbar>
      </app-header>

      <div>
        <iron-pages selected="[[page]]"
                    attr-for-selected="name"
                    fallback-selection="404"
                    role="main">
          <my-about name="about"></my-about>
          <my-register name="register"></my-register>
          <my-login name="login"
                    signed-in="[[signedIn]]"
                    user="[[user]]"></my-login>
        </iron-pages>
      </div>

      <!-- Go to Console -->
      <!-- <paper-fab icon="input"></paper-fab> -->
    </app-header-layout>

    <paper-toast id="toast"></paper-toast>
  </template>

  <script>
    Polymer({
      is: 'my-app',

      properties: {
        page: {
          type: String,
          reflectToAttribute: true,
          observer: '_pageChanged'
        },

        user: {
          type: Object,
          observer: '_userChanged'
        },

        signedIn: {
          type: Boolean,
          observer: '_signedInChanged'
        }
      },

      observers: [
        '_routePageChanged(routeData.page)'
      ],

      listeners: {
        'register': '_register',
        'authenticate': '_authenticate',
        'logout': '_logout',
        'showToast': 'showToast'
      },

      ready: function() {
        this.$.auth.signOut();
      },

      toast: function(message) {
        this.$.toast.text = message;
        this.$.toast.show(message);
      },

      showToast: function(e) {
        this.$.toast.show({
          text: e.detail.message
        });
      },

      _authenticate: function(e) {
        var provider = e.detail.provider;
        this.$.auth.signInWithPopup(provider)
          .then(function(response) {
            console.log('successful!', response);
          }).catch(function(error){
            console.log('oops!', error);
          });
      },

      _userChanged: function(user) {
        // console.log(user);
      },

      _signedInChanged: function(signIn) {
        console.log(signIn);
        if (signIn) {
          this.page = 'login';
          this.set('route.path', '/login');
          this.toast('Sweet. Thanks for logging in!');
        } else {
          this.toast('Y U NO sign in?');
        }
      },

      _logout: function() {
        this.$.auth.signOut();
      },

      _register: function() {
        this.page = 'register';
        this.set('route.path', '/register');
      },

      _routePageChanged: function(page) {
        this.page = page || 'about';
      },

      _pageChanged: function(page) {
        // Load page import on demand. Show 404 page if fails
        var resolvedPageUrl = this.resolveUrl('my-' + page + '.html');
        this.importHref(resolvedPageUrl, null, this._showPage404, true);
      },

      _showPage404: function() {
        this.page = '404';
      },

      handleError: function(e) {
        console.log(e);
      }
    });
  </script>
</dom-module>

4

2 回答 2

9

在 Firebase 控制台中的授权域中添加域。例如添加 localhost 或 127.0.0.1。

虽然 Firefox 中的错误说:

在完成操作之前,用户已关闭弹出窗口。

Chrome 给出了更具描述性的消息:

此域 (127.0.0.1) 无权运行此操作。将其添加到 Firebase 控制台 -> 身份验证部分 -> 登录方法选项卡中的 OAuth 重定向域列表中。

于 2017-11-22T18:34:42.607 回答
0

在我的本地开发环境中禁用 browsersync 为我解决了这个问题

于 2020-02-09T17:11:02.173 回答