如何在 react admin 自定义登录页面中使用户名未定义?

杜菲特吉亚

我想在 react-admin 上构建一个自定义登录,当电子邮件到达我的自定义身份验证提供程序时,有该登录的代码(如下),它变得未定义,但密码仍然可用。

import React from 'react';
import Avatar from '@material-ui/core/Avatar';
import Button from '@material-ui/core/Button';
import CssBaseline from '@material-ui/core/CssBaseline';
import TextField from '@material-ui/core/TextField';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Checkbox from '@material-ui/core/Checkbox';
import Link from '@material-ui/core/Link';
import Grid from '@material-ui/core/Grid';
import Box from '@material-ui/core/Box';
import LockOutlinedIcon from '@material-ui/icons/LockOutlined';
import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import Container from '@material-ui/core/Container';
import { useState } from 'react';
import { useLogin, useNotify, Notification, defaultTheme } from 'react-admin';
import { ThemeProvider } from '@material-ui/styles';
import { createMuiTheme } from '@material-ui/core/styles';
import {Theme} from "../styles/admin-theme"
import novawiLogo from "../assets/Logo/AppIcon/Novawi-appIcon.png"
import novawiLabel from "../assets/Logo/Logo-black/Label/Novawi-logo-label-black-100px.png"
import ForgotPassword from "./forgotPassword"
import { useHistory } from 'react-router-dom'

const useStyles = makeStyles((theme) => ({
  paper: {
    marginTop: theme.spacing(8),
    display: 'flex',
    flexDirection: 'column',
    alignItems: 'center',
  },
  header: {
    marginBottom: theme.spacing(5),
    display: 'flex',
    flexDirection: 'row',
    alignItems: 'center',
    justifyContent: 'space-evenly'
  },
  avatar: {
    margin: theme.spacing(1),
    backgroundColor: theme.palette.secondary.main,
  },
  form: {
    width: '100%', // Fix IE 11 issue.
    marginTop: theme.spacing(1),
  },
  submit: {
    margin: theme.spacing(3, 0, 2),
  },
}));

 /*   firebase.auth().signInWithEmailAndPassword(email,password).then(res => {
        console.log(res)
        localStorage.setItem('authInfos', res);
        history.push(window.location.hostname)
      }).catch((err) =>{
          console.log(err)
          notify('Invalid email or password')}
      ); */
      
const  SignIn = () => {
  const classes = useStyles();
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const login = useLogin();
  const notify = useNotify();
  const history = useHistory()
  const submit = e => {
      e.preventDefault();
      console.log("email : ", email, "password : ",password)
   
       login({ email, password }).catch((err) =>{
          console.log(err)
          notify('Invalid email or password')}
      ); 
  };

  return (
    <ThemeProvider theme={Theme}>
    <Container component="main" maxWidth="xs">
      <CssBaseline />
      <div className={classes.paper}>
        <div className={classes.header}>
        <Avatar variant="square" alt="Novawi logo" src={novawiLogo} />
        <img  alt="Novawi logo" src={novawiLabel} />
        </div>
        <Typography component="h1" variant="h6">
         Log into your account
        </Typography>
        <form className={classes.form} onSubmit={submit}>
          <TextField
            variant="outlined"
            margin="normal"
            required
            fullWidth
            id="email"
            label="Email Address"
            name="email"
            onChange={(e) => setEmail(e.target.value)}
            autoComplete="email"
            autoFocus
          />
          <TextField
            variant="outlined"
            margin="normal"
            required
            fullWidth
            onChange={(e) => setPassword(e.target.value)}
            name="password"
            label="Password"
            type="password"
            id="password"
            autoComplete="current-password"
          />
        {/*   <FormControlLabel
            control={<Checkbox value="remember" color="primary" />}
            label="Remember me"
          /> */}
          <Button
            type="submit"
            fullWidth
            variant="contained"
            color="primary"
            className={classes.submit}
          >
            Login
          </Button>
          <Grid container>
            <Grid item xs>
              <ForgotPassword/>          
            </Grid>
            <Grid item>
              <Link href="#" variant="body2">
                {"Don't have an account? Sign Up"}
              </Link>
            </Grid>
          </Grid>
        </form>
      </div>
    </Container>
    <Notification />
  </ThemeProvider>
  );
}

export default SignIn

还有我的身份验证提供者的代码:

const authFunctions =  {
    // called when the user attempts to log in
    login: ({ username,password }) => {
        localStorage.setItem('username', username);
        console.log("username         ",username)
        console.log("password        ",password)
        // accept all username/password combinations
        return Promise.resolve();
    },
    // called when the user clicks on the logout button
    logout: () => {
        localStorage.removeItem('username');
        return Promise.resolve();
    },
    // called when the API returns an error
    checkError: ({ status }) => {
        if (status === 401 || status === 403) {
            localStorage.removeItem('username');
            return Promise.reject();
        }
        return Promise.resolve();
    },
    // called when the user navigates to a new location, to check for authentication
    checkAuth: () => {
        return localStorage.getItem('username')
            ? Promise.resolve()
            : Promise.reject();
    },
    // called when the user navigates to a new location, to check for permissions / roles
    getPermissions: () => Promise.resolve(),
};

export default authFunctions

我只是把它放在我的管理员中,但它不像本地管理员那样工作

马特U

login({ email, password })- 那是不正确的。login函数接受与属性的对象usernamepassword,但你必须emailpasswordlogin({ username: email, password })在组件submit函数中将其更改为

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用#react-admin创建没有菜单侧栏(如登录页面)的自定义页面?

如何修复:在 react-admin 中未定义响应

如何在 react-admin 中集成自定义的 topBar 组件

如何在react-admin中访问自定义组件中的表单数据?

如何在React Admin中获得自定义操作的响应

react-admin:如何自定义批量操作

Django Admin:如何访问登录用户以在自定义“list_display”字段中使用它?

如何在react-admin中使用漂亮的URL(BrowserRouter)

如何在react-admin上实现忘记密码页面

React-admin:如何在页面加载时防止 getAll

如何在React Admin包中显示服务器端验证发出的自定义错误消息?

如何在 DJANGO 的自定义 ADMIN 页面中将用户“id”和用户“profile”更新为超级用户

如何在我的 React 网站中为登录页面设置自定义声明

我如何在 wp admin 的 woocomerce 订单详细信息页面上显示自定义用户数据

如何设置或自定义React-admin警报对话框?

如何在 create-react-app 项目中使用 Service Worker 制作自定义离线页面?

如何在Django CRUD中自定义auth.User Admin页面?

如何在Wordpress Admin中创建自定义页面,其中无需加载默认内容

React Admin,为 List 定义自定义 saga

如何在使用自定义用户模型时修复django admin中的“无法解压不可迭代的NoneType对象”错误

如何自定义“用户名已存在”消息?

如何自定义用户名验证

React-admin TypeError:dynamicSheet.update(...)未定义

如何自定义Flask Admin模板?

如何在React错误边界中使用自定义错误类型?

如何在 react/javascript 中使用 canvas 元素创建自定义布局/形状

在React中如何在Formik中使用自定义输入?

如何在React Native中使用Sentry自定义index.js的位置?

如何在React样式的组件中使用自定义图标?