nuxt3实现301重定向页面

需求

今天市场部来了一需求,一个内容中心的后台添加设置对文章详情页进行301重定向页面,所以前台也要对应实现


实现过程

首先我们要知道像这种对某一类的页面做控制的,最好写在中间件里,这样我们可以统一

这个是我的项目目录,接着在middleware目录下创建一个default.global.ts文件,这里我项目引入了typescript,如果没有引入就创建一个default.global.js,然后使用nuxt的小伙伴都知道nuxt里本身就有一些默认的约定和规则,所以这个文件会默认为全局的中间件

接着就是实现的代码,其实很简单,就在中间件里请求接口,然后判断是否需要301重定向页面,如果需要则跳转

方法一:写在全局中间件

import { getDetail } from "~/utils/Api/articleApi"

/**
 * 判断是否需要301跳转,若需要则跳转
 */
export default defineNuxtRouteMiddleware(async (to, from) => {
  if (to.name === "detail-id") {
    const data = await getDetail(to.params.id as string)
    if (data.isRedirect) {
        return navigateTo(data.redirectUrl, { external: true, redirectCode: 301 })
      }
  }
})

方法二:写在单独的中间件

我们在middleware目录下创建一个redirectArticle.ts文件,然后代码如下:

// middleware/redirectArticle.ts
import { getDetail } from "~/utils/Api/articleApi"

export default function ({ params, redirect }) {
  // 判断是否需要重定向
  if (to.name === "detail-id") {
    const data = await getDetail(to.params.id as string)
    if (data.isRedirect) {
        return navigateTo(data.redirectUrl, { external: true, redirectCode: 301 })
      }
  }
}

然后在页面中使用这个中间件

// pages/article/_id.vue
export default {
  middleware: 'redirectArticle',
  // 页面其他配置...
};

如果你使用的是组合式API的语法糖,代码如下:

// pages/article/_id.vue

import { useMiddleware } from 'nuxt';
import redirectArticle from '~/middleware/redirectArticle';

// 使用中间件
useMiddleware('redirectArticle');

期望

希望今天的分享可以对大家有帮助哦~

Nuxt.js 3.x 中实现谷歌登录和Facebook登录通常会利用现有的身份验证库和服务,例如 `vue-authenticate` 或 `nuxt-community/auth-module`。这两个库都是用于处理第三方登录的常用解决方案。 以下是大致步骤: 1. **安装依赖**: 使用 npm 或 yarn 安装所需的库: ``` npm install @nuxtjs/auth v2 @nuxtjs/google-signin @nuxtjs/firebase ``` 或者针对 `vue-authenticate`: ``` npm install vue-authenticate ``` 2. **配置**: 配置 Google 和 Facebook 登录服务。对于 Google,你需要创建Google Cloud Console项目,并获取 `client_id` 和 `redirect_uri`。对于 Facebook,同样需要注册应用并获取相应的 `app_id` 和 `app_secret`。 ```javascript // nuxt.config.js 或 auth.nuxt.js (如果是用auth-module) modules: [ '@nuxtjs/auth', ['@nuxtjs/google-signin', { clientId: 'your_google_client_id' }], // 或者使用 vue-authenticate { src: '~/plugins/vue-authenticate.js', ssr: false }, ] ``` 3. **添加登录按钮**: 在模板中引入 Google/Facebook 的登录按钮组件,并配置它们对应的服务: ```html <script setup> import GoogleSignin from '@/components/Auth/GoogleSignin.vue' // 或者 import FacebookLogin from '@/components/Auth/FacebookLogin.vue' const loginWithGoogle = () => { // GoogleSignin.login() } const loginWithFacebook = async () => { // FacebookLogin.login() } </script> <template> <div> <GoogleSignin @login="loginWithGoogle" /> <FacebookLogin @login="loginWithFacebook" /> </div> </template> ``` 4. **处理回调**: 当用户通过 Google 或 Facebook 完成授权后,将会重定向回你的应用并携带code(或其他必要的信息)。在回调函数中交换token: ```javascript methods: { async handleGoogleCallback({ code }) { try { const token = await this.$auth.google(code) // 存储token或进行其他操作 } catch (error) { console.error(error) } }, handleFacebookCallback({ code }) { // 类似处理Google的部分 } } ``` 5. **保护路由**: 如果你想限制某些页面只能访问给定权限的用户,可以在路由守卫里检查用户的登录状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值