【问题标题】:Authorization and Authentication using react - router - dom使用 react-router-dom 进行授权和认证
【发布时间】:2018-12-14 15:03:02
【问题描述】:

你好,这是我第一次来这里。

过去几个小时我一直在尝试解决这个问题,但我无法理解这个问题(我是新手)。

PrivateRoute 中,我正在尝试基于会话呈现身份验证组件。

  • 会话 EXISTS => 应呈现身份验证组件
  • 不存在 => 接收到的组件应呈现

我得到的错误是:

Objects are not valid as a React child (found: [object Promise]). 
If you meant to render a collection of children, use an array instead.

我们将不胜感激!

这是我到目前为止所做的:

import Login from './Login'
import Register from './Register'
import React, {Component} from 'react'
import Authentication from './Authentication'
import { BrowserRouter , Redirect,  Route, Switch,} from 'react-router-dom'



const  Authorization= ()=>{
  return new Promise ((resolve,reject)=>{
    fetch('http://localhost:3000/content',{credentials:'include'}) //includes cookie from different port
    .then((res)=>res.json())
    .then((data)=>{
      if (data.user=="notLogged"){
        reject(false)
      }else    
        resolve(true)
    })
  })
}

const  PrivateRoute= async ({ component: Component})=> {
  var auth= await Authorization()
  console.log(auth);
  if (auth){
    return <Authentication/> 
  }else{
    return  <Component/>  
  }
}

class Index extends Component{
 
  render(){
    return(
      <BrowserRouter>
      {/* router may have only one child element- switch is the more common */}
        <Switch>
          <PrivateRoute exact path="/" component={Login}/>
          <PrivateRoute exact path="/login" component={Login} />
          <Route exact path="/register" component={Register} />
        </Switch>
      </BrowserRouter>
    )
  }
}

export default Index

【问题讨论】:

  • 无论var auth= await Authorization() 的答案如何,都会发生此错误吗?
  • 没有它在这一行生成,我在从授权返回结果时遇到了一些困难,所以我使用 Promises 进行了尝试。和错误一致。

标签: javascript reactjs react-router react-router-dom


【解决方案1】:

找到我帖子的答案。

我做错了。

这是我目前的想法

import Login from './Login'
import Register from './Register'
import React, {Component} from 'react'
import Authentication from './Authentication'
import { BrowserRouter , Route, Switch} from 'react-router-dom'


 const PrivvatRoute=({ component: Component, user})=>(
  <Route  render={(props) =>  user==="notLogged" ?  <Component/> : <Authentication user={user} /> } />
)

class Index extends Component{
  constructor(props){
    super(props);
    this.state={user:""}
}
 
render(){
 return(
 <BrowserRouter>
 {/* router may have only one child element- switch is the more common */}
    <Switch>
       <PrivvatRoute exact path="/"   component={Login} user={this.state.user}   />
       <PrivvatRoute exact path="/login"   component={Login} user={this.state.user} />
       <PrivvatRoute exact path="/register"  component={Register} user={this.state.user}  />
    </Switch>
  </BrowserRouter>
)
}


componentWillMount(){
  fetch('http://localhost:3000/content',{credentials:"include"})
  .then((data)=>data.json())
  .then((data)=>{this.setState(data);  console.log(data)
 
 })
 }
}

export default Index

并且工作正常!

【讨论】:

  • 我喜欢看到人们回答自己的问题。干得好。
猜你喜欢
  • 2010-10-30
  • 2017-01-31
  • 2018-07-25
  • 2010-11-14
  • 2021-11-08
  • 2013-08-08
  • 2017-09-11
  • 2023-03-23
相关资源
最近更新 更多