AUTH_LOGIN fetch 完成后如何调用AUTH_CHECK?
How to call AUTH_CHECK after AUTH_LOGIN fetch is complete?
我正在调用 HTTP API 以使用 returns 承诺的 axios 登录 AUTH_LOGIN。在 API 调用完成之前,AUTH_CHECK 被调用并失败。 AUTH_CHECK 是否只有在 http 调用完成后才能触发?请在下面找到我的 authprovider
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'
export default (type, params) => {
// called when the user attempts to log in
if (type === AUTH_LOGIN) {
const { username, password } = params
login(username, password)
return Promise.resolve()
}
// called when the user clicks on the logout button
if (type === AUTH_LOGOUT) {
logout()
return Promise.resolve()
}
// called when the API returns an error
if (type === AUTH_ERROR) {
const { status } = params
if (status === 401 || status === 403) {
logout()
return Promise.reject()
}
return Promise.resolve()
}
// called when the user navigates to a new location
if (type === AUTH_CHECK) {
// return isLoggedIn() ? Promise.resolve() : Promise.reject()
return isLoggedIn() ? Promise.resolve() : Promise.reject()
}
return Promise.reject('Unknown method')
}
登录方式:
import axios from 'axios'
export function login(username, password) {
logout()
startLogin()
axios({
method: 'post',
url: '/auth/login',
auth: {
username: username,
password: password
},
})
.then(function (response) {
let token = response.headers['jwt-token']
setToken(token)
})
.catch(function (error) {
logout()
});
}
export function logout() {
localStorage.removeItem('token')
}
export function isLoggedIn() {
return localStorage.getItem('token') ? true:false
}
export function getToken() {
localStorage.getItem('token')
}
export function setToken(token) {
localStorage.setItem('token', token)
}
我可以使用 async / await 修复它。
授权提供商:
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'
export default async (type, params) => {
switch(type) {
case AUTH_LOGIN:
const { username, password } = params
await login(username, password)
return Promise.resolve()
break
case AUTH_LOGOUT:
logout()
return Promise.resolve()
break
case AUTH_ERROR:
const { status } = params
if (status === 401 || status === 403) {
logout()
return Promise.reject()
}
return Promise.resolve()
break
case AUTH_CHECK:
return isLoggedIn() ? Promise.resolve() : Promise.reject()
break
}
return Promise.reject('Unknown method')
}
登录方法:
从 'axios'
导入 axios
export async function login(username, password) {
logout()
const response = await axios({
method: 'get',
url: '/auth/login',
auth: {
username: username,
password: password
},
})
const token = await response.headers['jwt-token']
setToken(token)
}
export function logout() {
localStorage.removeItem('token')
}
export function isLoggedIn() {
return localStorage.getItem('token') ? true:false
}
export function getToken() {
localStorage.getItem('token')
}
export function setToken(token) {
localStorage.setItem('token', token)
}
export function getResourcesForUser() {
}
我正在调用 HTTP API 以使用 returns 承诺的 axios 登录 AUTH_LOGIN。在 API 调用完成之前,AUTH_CHECK 被调用并失败。 AUTH_CHECK 是否只有在 http 调用完成后才能触发?请在下面找到我的 authprovider
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'
export default (type, params) => {
// called when the user attempts to log in
if (type === AUTH_LOGIN) {
const { username, password } = params
login(username, password)
return Promise.resolve()
}
// called when the user clicks on the logout button
if (type === AUTH_LOGOUT) {
logout()
return Promise.resolve()
}
// called when the API returns an error
if (type === AUTH_ERROR) {
const { status } = params
if (status === 401 || status === 403) {
logout()
return Promise.reject()
}
return Promise.resolve()
}
// called when the user navigates to a new location
if (type === AUTH_CHECK) {
// return isLoggedIn() ? Promise.resolve() : Promise.reject()
return isLoggedIn() ? Promise.resolve() : Promise.reject()
}
return Promise.reject('Unknown method')
}
登录方式:
import axios from 'axios'
export function login(username, password) {
logout()
startLogin()
axios({
method: 'post',
url: '/auth/login',
auth: {
username: username,
password: password
},
})
.then(function (response) {
let token = response.headers['jwt-token']
setToken(token)
})
.catch(function (error) {
logout()
});
}
export function logout() {
localStorage.removeItem('token')
}
export function isLoggedIn() {
return localStorage.getItem('token') ? true:false
}
export function getToken() {
localStorage.getItem('token')
}
export function setToken(token) {
localStorage.setItem('token', token)
}
我可以使用 async / await 修复它。
授权提供商:
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'
export default async (type, params) => {
switch(type) {
case AUTH_LOGIN:
const { username, password } = params
await login(username, password)
return Promise.resolve()
break
case AUTH_LOGOUT:
logout()
return Promise.resolve()
break
case AUTH_ERROR:
const { status } = params
if (status === 401 || status === 403) {
logout()
return Promise.reject()
}
return Promise.resolve()
break
case AUTH_CHECK:
return isLoggedIn() ? Promise.resolve() : Promise.reject()
break
}
return Promise.reject('Unknown method')
}
登录方法: 从 'axios'
导入 axiosexport async function login(username, password) {
logout()
const response = await axios({
method: 'get',
url: '/auth/login',
auth: {
username: username,
password: password
},
})
const token = await response.headers['jwt-token']
setToken(token)
}
export function logout() {
localStorage.removeItem('token')
}
export function isLoggedIn() {
return localStorage.getItem('token') ? true:false
}
export function getToken() {
localStorage.getItem('token')
}
export function setToken(token) {
localStorage.setItem('token', token)
}
export function getResourcesForUser() {
}