devise-jwt 在身份验证之前生成令牌?
devise-jwt generating token before authentication?
所以我正在使用 Cypress
编写端到端自动化测试。为了使我的测试保持原子性,我尝试为该特定测试生成所需的数据。
例如,我尝试从一个干净的数据库开始(使用迁移 运行)并通过 Cypress API 请求生成一个用户。
问题是使用 devise-jwt 我需要连同 auth: bearer
令牌一起发送。通常这是在登录时生成的。所以问题就在这里:要发出 POST
请求来创建用户,我需要有令牌进行身份验证....但是没有用户登录并获取令牌我不能知道令牌将是什么。
我讨厌只用一个用户为数据库播种,因为我试图将依赖性保持在最低限度并尽可能地测试原子性。有什么方法可以通过设计和在我的测试中以某种方式使用它来“grab/generate”身份验证令牌吗?
这是一个 Rails/React 应用程序。
我不知道获取 devise-jwt
令牌的工作流程,但如果它生成 cookie、sessionStorage 或 localStorage 值,您可以使用 cy.session()
.[=13= 保存它]
Cypress.config('experimentalSessionSupport', true)
beforeEach(() => {
cy.session('mySession', () => {
// this "setup" callback is called once only,
// thereafter results are returned from cache
// actions to seed database, get user data
const window = cy.state('window')
window.fetch(LOGIN_URL, dataWithLoginInfo).then(response => {
const jwt = response.headers.get('Authorization').split('Bearer ')[1];
window.sessionStorage.setItem('jwt', jwt) // this is now cached - same token each time
})
})
})
it('uses jwt token', () => {
const token = cy.state('window').sessionStorage.getItem('jwt')
const headers = { Authorization: `Bearer ${token}` }
...
})
所以我正在使用 Cypress
编写端到端自动化测试。为了使我的测试保持原子性,我尝试为该特定测试生成所需的数据。
例如,我尝试从一个干净的数据库开始(使用迁移 运行)并通过 Cypress API 请求生成一个用户。
问题是使用 devise-jwt 我需要连同 auth: bearer
令牌一起发送。通常这是在登录时生成的。所以问题就在这里:要发出 POST
请求来创建用户,我需要有令牌进行身份验证....但是没有用户登录并获取令牌我不能知道令牌将是什么。
我讨厌只用一个用户为数据库播种,因为我试图将依赖性保持在最低限度并尽可能地测试原子性。有什么方法可以通过设计和在我的测试中以某种方式使用它来“grab/generate”身份验证令牌吗?
这是一个 Rails/React 应用程序。
我不知道获取 devise-jwt
令牌的工作流程,但如果它生成 cookie、sessionStorage 或 localStorage 值,您可以使用 cy.session()
.[=13= 保存它]
Cypress.config('experimentalSessionSupport', true)
beforeEach(() => {
cy.session('mySession', () => {
// this "setup" callback is called once only,
// thereafter results are returned from cache
// actions to seed database, get user data
const window = cy.state('window')
window.fetch(LOGIN_URL, dataWithLoginInfo).then(response => {
const jwt = response.headers.get('Authorization').split('Bearer ')[1];
window.sessionStorage.setItem('jwt', jwt) // this is now cached - same token each time
})
})
})
it('uses jwt token', () => {
const token = cy.state('window').sessionStorage.getItem('jwt')
const headers = { Authorization: `Bearer ${token}` }
...
})