JS:如何通过重定向功能将URL传递到登录功能

JavaScript React.js

StafanGO

2020-03-23

在我的React / nextJS应用程序中,我正在检查getInitialProps静态函数中的有效令牌我将其用作HOC-但在这种情况下这无关紧要。

如果令牌无效(或丢失),则用户将被重定向到登录页面。可以通过redirect如下所示功能来完成到目前为止,一切都很好。

如何将用户从中重定向到登录组件的页面的URL传递?

如果用户未登录并正在调用类似http://my-server.com/any-page的内容,则他将被重定向到索引页面(http://my-server.com):将进行登录形成。如果登录成功,我想将他重定向回第一个被调用的页面:http : //my-server.com/any-page

  1. 以未登录用户身份呼叫受限页面
  2. 重定向到索引登录页面
  3. 登录后重定向到页面1。

我不知道如何将此信息传递给登录功能...

with-server-props.js

export default WrappedComponent =>
  class extends Component {
    static async getInitialProps (context) {
      const { req, pathname } = context
      let isValid = false

      if (req && req.headers) {
        const cookies = req.headers.cookie
        if (typeof cookies === 'string') {
          const cookiesJSON = jsHttpCookie.parse(cookies)
          initProps.token = cookiesJSON['auth-token']
          if (cookiesJSON['auth-token']) {
            jwt.verify(cookiesJSON['auth-token'], secret, (error, decoded) => {
              if (error) {
                console.error(error)
              } else {
                isValid = true
              }
            })
          }
        }
      }

      // Redirect to index (=login) page if isValid is false
      if (!isValid && pathname && pathname !== '/') {
        redirect(context, pathname ? '/?ref=' + pathname : '/')
      }

      return initProps
    }
    render () {
      return <WrappedComponent {...this.props} />
    }
  }

redirect.js

import Router from 'next/router'

export default (context, target) => {
  if (context.res) {
    // server
    context.res.writeHead(303, { Location: target })
    context.res.end()
  } else {
    // In the browser, we just pretend like this never even happened ;)
    Router.replace(target)
  }
}

pages / index.js

在index.js上submit具有用于登录用户功能。在那里,用户应重定向到初始页面:

_onSubmit (event) {
  this.props.loginMutation({
    variables: { username, password }
  }).then(response => {
    const token = response.data.token
    if (token) {
      Cookies.set('auth-token', token, { expires: 1 })
      this.props.client.resetStore().then(() => {
        window.location.assign('/') // <-- Redirect to initial called page
      })
    }
  })
}

第2613篇《JS:如何通过重定向功能将URL传递到登录功能》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

0个回答

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android