无法验证,在生产中未经授权
Unable to authenticate, unauthorized in production
我已经使用 api-platform、lexikJWTauthbundle 和 react-admin 构建了我的网站,这在本地开发中非常有用,但是当我将其推入生产环境时,我的管理界面登录总是 return 错误“401 错误凭据”并且令牌永远不会存储在本地。我不知道为什么,因为访问者页面显示了我存储在数据库中的所有内容。所以我假设连接是正确的。
我已经尝试用 "RewriteRule" "SetEnvIf" 更改 .htaccess ...这是我的代码:
//authProvier.js
import {AUTH_LOGIN, AUTH_LOGOUT, AUTH_CHECK} from 'react-admin';
export default (type, params) => {
if (type === AUTH_LOGIN) {
const {username, password} = params;
const request = new Request('/admin/authentication_token', {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/json'
}),
body: JSON.stringify({
username:
username,
password
}),
})
return fetch(request)
.then(response => {
console.log(response)
if (response.status < 200 || response.status >= 300) {
throw new Error(response.statusText);
}
return response.json();
})
.then(({token}) => {
localStorage.setItem('token', token);
return Promise.resolve()
});
}
if (type === AUTH_LOGOUT) {
localStorage.removeItem('token');
return Promise.resolve();
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token') ? Promise.resolve() : Promise.reject();
}
return Promise.reject('Unknown method');
};
// config/security.yaml
security:
role_hierarchy:
ROLE_ADMIN: [ROLE_ADMIN]
encoders:
App\Entity\AdminUser:
algorithm: argon2i
providers:
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\AdminUser
property: username
firewalls:
login:
pattern: ^/admin/authentication_token
provider: app_user_provider
stateless: true
anonymous: true
json_login:
check_path: /admin/authentication_token
username_path: username
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
dev:
pattern: ^/_(profiler|wdt)
security: false
api:
pattern: ^/api/
anonymous: true
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
access_control:
- { path: ^/admin, roles: ROLE_ADMIN}
当我console.log请求和响应时,header总是空的。
[![error401][1]][1]
我不知道问题是来自 "https" url 域还是 "Server API" 是 CGI/FastCGI 因为在本地它是 "http" 和 "Apache2.0 handler"。
我无法访问 httpd.conf 文件...
如果您有任何想法,请提前致谢。
/!\ 如果你遇到这个问题,请检查 Argon2i,我的网络托管商不支持它,所以我通过 bcrypt 进行了更改....
我已经使用 api-platform、lexikJWTauthbundle 和 react-admin 构建了我的网站,这在本地开发中非常有用,但是当我将其推入生产环境时,我的管理界面登录总是 return 错误“401 错误凭据”并且令牌永远不会存储在本地。我不知道为什么,因为访问者页面显示了我存储在数据库中的所有内容。所以我假设连接是正确的。
我已经尝试用 "RewriteRule" "SetEnvIf" 更改 .htaccess ...这是我的代码:
//authProvier.js
import {AUTH_LOGIN, AUTH_LOGOUT, AUTH_CHECK} from 'react-admin';
export default (type, params) => {
if (type === AUTH_LOGIN) {
const {username, password} = params;
const request = new Request('/admin/authentication_token', {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/json'
}),
body: JSON.stringify({
username:
username,
password
}),
})
return fetch(request)
.then(response => {
console.log(response)
if (response.status < 200 || response.status >= 300) {
throw new Error(response.statusText);
}
return response.json();
})
.then(({token}) => {
localStorage.setItem('token', token);
return Promise.resolve()
});
}
if (type === AUTH_LOGOUT) {
localStorage.removeItem('token');
return Promise.resolve();
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token') ? Promise.resolve() : Promise.reject();
}
return Promise.reject('Unknown method');
};
// config/security.yaml
security:
role_hierarchy:
ROLE_ADMIN: [ROLE_ADMIN]
encoders:
App\Entity\AdminUser:
algorithm: argon2i
providers:
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\AdminUser
property: username
firewalls:
login:
pattern: ^/admin/authentication_token
provider: app_user_provider
stateless: true
anonymous: true
json_login:
check_path: /admin/authentication_token
username_path: username
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
dev:
pattern: ^/_(profiler|wdt)
security: false
api:
pattern: ^/api/
anonymous: true
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
access_control:
- { path: ^/admin, roles: ROLE_ADMIN}
当我console.log请求和响应时,header总是空的。 [![error401][1]][1]
我不知道问题是来自 "https" url 域还是 "Server API" 是 CGI/FastCGI 因为在本地它是 "http" 和 "Apache2.0 handler"。 我无法访问 httpd.conf 文件... 如果您有任何想法,请提前致谢。
/!\ 如果你遇到这个问题,请检查 Argon2i,我的网络托管商不支持它,所以我通过 bcrypt 进行了更改....