如何使用Nuxtjs在服务器端实现Auth0?

时间:2019-07-14 15:05:19

标签: authentication nuxt.js auth0 ssr

我有一个Nuxt应用,其身份验证已在通用模式下运行。

我正在尝试将身份验证服务转换为Auth0。我关注的是Vue quickstart,但是我发现auth0-js是一个客户端库,因为它使用了很多'window'的东西,而这些东西在Nuxt的服务器端是不可用的。

但是,我通过使它成为客户端插件并在process.client检查中包装了所有功能(即在生命周期挂钩中调用authservice)而使其工作正常。之所以可以使用“某种”,是因为在未登录时进入受保护的页面时,它会在刷新页面之前将其闪烁,然后重定向到登录页面(因为它也在服务器端呈现,但是检查仅在将其交付给客户端时才进行)。我认为是客户端)。

我现在的问题是:
我该怎么做才能将支票也添加到服务器端?(或至少确保不刷新受保护的页面)重定向之前)。

到目前为止,我已经尝试过:

  • 将有效负载和登录状态保存在商店中,并签入一些自定义中间件,但这并不能解决问题。

另外,在我看来@ nuxt / auth已过时,或者nuxt auth0 example也已过时。当我使用新的auth0通用时,它使用auth0-lock。

有人对如何解决此问题有建议吗?预先感谢!

1 个答案:

答案 0 :(得分:2)

不确定这是否有帮助,仅回答了几个问题(很久以前是其他帐户)。


更新 ..我先阅读答案,然后回答问题标题(我认为我的回答确实涵盖了您的部分情况),但是关于标题,您也可以使用{{1} }作为plugin。然后,您可以在页面被点击之前在那里处理内容。


我不确定您的代码是如何实现的,但这可能(希望)有所帮助。

如果您不使用Vuex,我强烈建议您使用。 Nuxt Vuex Store Guide

auth
// index/store.js
// At least have the store initialized, but its most likely going to be used..

// page.vue <template> ... <div v-else-if="!$auth.loggedIn"> {{ test }} </div> ... ... data() { if (!this.$auth.loggedIn) { const test = 'Only this will load, no flash' return { test } } } 是内置的,我在文档中的某处读取了它。

这将解决无闪存问题,您还可以利用加载程序屏幕和asyncData在呈现视图之前检查$auth.loggedIn,以避免闪存和如果挂起填充数据。

您也可以尝试使用 Vuex Actions ,目前我正在使用这2种游戏。了解nuxtServerInit()

state

第二个是使用页面本身上的// store/index.js import axios from 'axios' export const actions = { nuxtServerInit ({commit}, {request}) { // This is good if you have the user in your request or other server side stuff if (request.user) commit('SET_USER', request.user) }, async GET_USER({ commit }, username) { const user = await axios.get(`/user/${username}`) if (user) commit('SET_USER', user) } } export const mutations = { SET_USER(state, user) { // simple set for now state.auth.user = user || null } } 方法合并的。

fetch()

现在,您可以根据需要在代码中调用// page.vue async fetch({ $auth, store }) { await store.dispatch('GET_USER', $auth.$state.user) }

$auth.user是我在..somewhere ..

中读取的另一种内置函数。

您还可以使用$auth.user来呼叫$auth.user,以检查是否$auth.loggedIn在登录user之上是否存在。

根据您尝试引用它的位置,它可能是$auth.user && $auth.loggedIn

我了解到this.$auth.<value>首先被调用并登录到服务器中,然后asyncData()也在服务器控制台中记录值(data()false),但是在我的勇敢游戏机是null,我想回答这个问题

我一直在努力尝试使undefined能够与 JWT 一起工作,但是随着我不断地爬行,我发现了一些有用的内容(即使在诸如您提到的那个,Auth0东西什么也没有...)。同样就lock和我的 API 而言...总之,希望对您有所帮助。