代码之家  ›  专栏  ›  技术社区  ›  kabugh

根据选定的输入获取用户的电子邮件

  •  0
  • kabugh  · 技术社区  · 6 年前

    我用 firebase 用于用户身份验证。我有一个用户可以登录的表单。有一个 select 输入不同 options 是的。用户选择一个 option 类型正确 password 然后登录。我需要找到在 选择 输入,这样我就可以在 onSignIn() 方法-待精密化: this.$store.dispatch('signUserIn', { //CURRENT email: this.chosenUser.email, password: this.password}) 是的。

    但当我点击 Log in 在我的实际生活中 火力基地 连接的项目出现错误: signInWithEmailAndPassword failed: First argument "email" must be a valid string. 我认为 this.chosenUser.email 是一根绳子。我该怎么修?

    来了一个 demo 是的。

    登录组件:

    <template>
      <section class="signin">
        <div class="login">
          <h1>Log in</h1>
          <form>
            <select v-model="chosenUser">
              <option v-for="user in users">{{ user.login }}</option>
            </select>
            <input type="password" v-model="password" id="password" placeholder="Password">
            <input type="button" @click="onSignIn" value="Login">
          </form>
        </div>
      </section>
    </template>
    <script>
    import { mapGetters } from "vuex";
    export default {
      data() {
        return {
          chosenUser: "",
          password: ""
        };
      },
      methods: {
        onSignIn() {
          this.$store.dispatch("signUserIn", {
            email: this.user.email,
            password: this.password
          });
        }
      },
      computed: {
        ...mapGetters(["users", "user"])
      }
    };
    </script>
    

    商店.js:

    state: {
        users: [
          { login: "London", email: "london@gmail.com" },
          { login: "Paris", email: "paris@gmail.com" }
        ],
        user: null
      },
      actions: {
        signUserIn({ commit }, payload) {
          firebase
            .auth()
            .signInWithEmailAndPassword(payload.email, payload.password)
            .then(user => {
              const newUser = {
                id: user.uid,
                cart: []
              };
              commit("setUser", newUser);
            })
            .catch(error => {
              console.log(error);
            });
        }
      },
      mutations: {
        setUser(state, payload) {
          state.user = payload;
        }
      },
      getters: {
        users: state => {
          return state.users;
        },
        user: state => {
          return state.user;
        }
      }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   ittus    6 年前

    您应该将值绑定到选择:

    <select v-model="chosenUser">
      <option v-for="user in users" :value="user">{{ user.login }}</option>
    </select>
    

    如果不绑定值,则默认值将等于选项的 text

    默认数据应为对象

    data() {
        return {
          chosenUser: { login: "London", email: "london@gmail.com" },
          password: ""
        };
    }
    

    在方法上:

     methods: {
        onSignIn() {
          this.$store.dispatch("signUserIn", {
            email: this.chosenUser.email,
            password: this.password
          });
        }
      }