我已经用Symfony4 + GraphQl + axios + vuejs实现了一个api平台应用程序;所有这些都作为SPA起作用,它使用单个控制器动作来呈现模板,然后所有路由器都由vue-router处理。到目前为止一切顺利。
当我要保护应用程序(常规symfony方式)正常工作时,这里是配置
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
encoders:
Symfony\Component\Security\Core\User\User: plaintext
App\Entity\User:
algorithm: bcrypt
providers:
in_memory:
memory:
users:
administrador: { password: p@ssw0rd, roles: [ 'ROLE_USER' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
tempapi: #this should not be configured
pattern: ^/api
security: false
memory:
pattern: ^/
logout: true
anonymous: true
provider: in_memory
form_login:
login_path: /login
check_path: /login
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
我认为一切都配置正确,但是当我评论tempapi防火墙并进行登录时,我无法访问api,我得到的只是重定向到登录页面。请注意,我正在从防火墙后面的视图访问该api,因此我希望它表现为常规的ajax请求(因为确实如此)。
当我删除注释并离开tempapi防火墙而没有安全性时,我可以访问api,但无法访问已记录的用户凭据,角色等。
阿波罗配置以使用graphql端点
const httpLink = new HttpLink({
uri: '/api/graphql'
})
const cache = new InMemoryCache()
export default new ApolloClient({
link: httpLink,
cache,
connectToDevTools: true
})
axios配置以访问其余端点
export const backend = axios.create({
baseURL: '/api',
headers: {
'Content-Type': 'application/json'
}
})
为什么symfony处理经过身份验证的防火墙后发出的异步请求,因为它们是外部的?我没有CORS的问题
谢谢!