iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Modern Web

Vue 3 請你幫我做一個網站好嗎 (っಠ‿ಠ)っ系列 第 8

Day08 - 用 axios 做登入功能

在專案中透過

npm install --save axios

載入 axios


新增一個 SFC, 也就是一個 .vue 檔
template

<template>
  <div class="container">
    <!-- submit 事件觸發時,執行 login -->
    <form @submit.prevent="login">
      <div class="mb-3">
        <label for="inputEmail" class="form-label">Email address</label>
        <input
          type="email"
          class="form-control"
          id="inputEmail"
          aria-describedby="emailHelp"
          v-model="user.email"
        />
      </div>
      <div class="mb-3">
        <label for="inputPassword" class="form-label">Password</label>
        <input
          type="password"
          class="form-control"
          id="inputPassword"
          v-model="user.password"
        />
      </div>
      <!-- type 為 submit 讓按下後得以觸發 submit -->
      <button type="submit" class="btn btn-primary">Submit</button>
      <button type="button" class="btn btn-primary ml-5" @click="getData">
        Get Data
      </button>
      <button type="button" class="btn btn-primary" @click="logout">
        Logout
      </button>
    </form>
  </div>
</template>

script

<script>
// 記得要先 import axois
import axios from "axios";
export default {
  name: "Login",
  data() {
    return {
      // 與使用者輸入的帳密欄位 v-model 雙向綁定
      user: {
        email: "",
        password: "",
      },
      // getData 時會先從瀏覽器 cookie 叫出 Token 存來此元件
      token: "",
    };
  },
  methods: {
    login() {
      // 如果一開始沒有 import axios 的話
      // 用 require("axios").default 也可以讓我們使用 axios
      // const axios = require("axios").default;
      axios
        .post(`你的 api 喔`, this.user)
        .then((res) => {
          const token = res.data.token;
          const expired = res.data.expired;
          // 將 token 與他的到期時間存到瀏覽器 cookie 裡
          document.cookie = `loginToken = ${token}; expires = ${new Date(
            expired * 1000
          )};`;
        });
    },
    getData() {
      // 先從瀏覽器 cookie 取得 token
      this.token = document.cookie.replace(/(?:(?:^|.*;\s*)loginToken\s*=\s*([^;]*).*$)|^.*$/, "$1");
      const api = `你的 api 喔`;

      // https://github.com/axios/axios#global-axios-defaults
      // 並且 header 按照後端 api 文件的規格要求填上 Bearer token 字樣
      axios.defaults.headers.common.Authorization = `this.token`;
      axios.get(api).then((res) => {
        console.log(res);
      });
    },
    logout() {
      // 清除瀏覽器 cookie 的 Token
      document.cookie = `loginToken = ""; expires = "";`;
    },
  },
};
</script>

style

今天的練習純用 bootstrap 所以就沒有 style code 哩


若上述理解有誤,都在麻煩提點了~~感謝您 (っಠ‿ಠ)っ


上一篇
Day07 - 登入的過程
下一篇
Day09 - 物件要解構成 primitive 再傳入 props ,小心 by reference 動到不該動的兄弟
系列文
Vue 3 請你幫我做一個網站好嗎 (っಠ‿ಠ)っ19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言