Apollo useMutation, завершение onCompleted, всегда возвращающее true во время аутентификации входа? - PullRequest
1 голос
/ 03 апреля 2020

Я выполняю мутацию GraphQL для попытки аутентификации при входе в систему, однако она каждый раз возвращает true и сохраняет нового пользователя AuthToken, даже если данные для входа неверны. Это очень странно, потому что когда я запускаю запрос GraphQL в IDE, он работает как надо. (ie. Только успешно, если логин / пароль верны). Я не уверен, как он генерирует auth.Token и console.logs "onSuccess" независимо от того, что я положил в формы. Любая помощь будет принята с благодарностью, это сводит меня с ума. Спасибо.

const LOGIN_USER = gql `
mutation LoginUser {
    login (input: {
    clientMutationId:"uniqueId"
    username: "admin"
    password: "password"
    }) {
        authToken
            user {
                id
                name
            }
        }
}
`
const SignIn = (props) => {

const [username, setUsername] = useState('')
const [password, setPassword] = useState('')
const [loggedIn, setLoggedIn] = useState(false)

const onLoginError = () => {
    console.log("onError")
} 

const onLoginSuccess = () => {
    console.log("onSuccess")
} 

const [loginUser, { loading, error }] = useMutation(LOGIN_USER, {
    onCompleted({login}) {
        localStorage.setItem('token', login.authToken)
        onLoginSuccess()
    },
    onError(error){
        alert(error)
        onLoginError()
    }
})

const onLoginSubmit = (event) => {
    event.preventDefault()
    loginUser({ variables:
        {
            "input": {
                "clientMutationId": "uniqueId",
                "username": username,
                "password": password
            }
        }
    })
}
const handleOnChange = (event) => {
    if(event.target.name === "username") {
        setUsername(event.target.value)
    } else if(event.target.name === "password") {
        setPassword(event.target.value)
    }
}
return (
<form onSubmit={onLoginSubmit}>
<>
                        <input
                            className={styles.formInput}
                            name="username" 
                            placeholder="Username or email" 
                            type="text" 
                            value={username}
                            onChange={handleOnChange}
                        >
                        </input>
                        <input 
                            className={styles.formInput}
                            name="password"
                            placeholder="Password" 
                            type="password" 
                            value={password}
                            onChange={handleOnChange}
                        >
                        </input>
                        <button 
                            className="button is-primary is-pulled-right has-text-weight-semibold"
                            type="submit"
                            disabled={loading}
                        ><FiLogIn className={styles.loginIcon}/>
                            Login
                        </button>
                    </form>
</>
export default SignIn

1 Ответ

1 голос
/ 03 апреля 2020

Ваш запрос имеет жестко запрограммированные значения для username и password, поэтому они будут приводить к успешному входу в систему каждый раз, независимо от того, что введено в вашей форме. Любое значение, которое вы передаете для variables, фактически игнорируется, поскольку вы фактически не используете переменные внутри запроса. Обновите ваш запрос, чтобы фактически использовать переменные, которые вы передаете (username и password).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...