【问题标题】:React - Django : TypeError: Cannot read property 'token' of undefinedReact - Django:TypeError:无法读取未定义的属性“令牌”
【发布时间】:2021-02-07 06:35:24
【问题描述】:

我正在尝试使用 react 和 django rest 登录。 我有用于登录后端的 rest-auth,并且用户来自 LDAP。

django 上的登录有效。 从 react 调用时,我的后端的响应也有效。

我尝试使用 react-cookie 将我的令牌保存在 cookie 中。

但是当我这样做时,我有错误:TypeError: Cannot read property 'token' of undefined

我拆分了我的代码。我有一个文件 api_auth_service.js

export class APILogin {
    static loginUser(body){
        return fetch('http://127.0.0.1:8000/rest-auth/login/', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(body)
        }).then( resp => resp.json())
    }
}

和我在反应中的登录视图:

export default function Login() {

  const [ username, setUsername] = useState('');
  const [ password, setPassword] = useState('');

  const [token, setToken] = useCookies(['gra-token']);


  useEffect(() => {
    console.log(token);

  }, [token])

  const loginClicked = () => {
    APILogin.loginUser({username, password})
    .then( resp => console.log(resp))
    .then(resp => setToken('gra-token', resp.token))
    .catch( error => console.log(error))
  }

  return ( .............

如您所见,保存到我的 cookie 中的显然不是令牌

【问题讨论】:

  • 我认为这是因为在你的第一次,你没有返回任何东西,只是在做console.log。我会将setToken 移动到与控制台相同的then 子句中,或者从第一个then 子句中返回一些内容

标签: javascript reactjs django-rest-framework


【解决方案1】:
const loginClicked = () => {
 APILogin.loginUser({username, password})
 .then( resp => resp)
 .then(resp => setToken('gra-token', resp.token))
 .catch( error => console.log(error))
}

您需要从第一个 then 语句中返回相应的值

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 2021-10-15
    • 1970-01-01
    • 2021-07-05
    • 2021-01-10
    • 2019-04-09
    • 2020-10-10
    • 2019-02-15
    • 2020-07-23
    相关资源
    最近更新 更多