no token in login response. token is inside response header

This commit is contained in:
Moriz Wahl 2021-09-13 13:30:53 +02:00
parent 02a962c83b
commit 12a5f58376
6 changed files with 32 additions and 75 deletions

View File

@ -1,19 +0,0 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field } from 'type-graphql'
import { User } from '../models/User'
import encode from '../../jwt/encode'
@ObjectType()
export class LoginResponse {
constructor(json: any) {
this.token = encode(json.sessionId)
this.user = new User(json.user)
}
@Field(() => String)
token: string
@Field(() => User)
user: User
}

View File

@ -7,7 +7,8 @@ import { CheckUsernameResponse } from '../models/CheckUsernameResponse'
import { LoginViaVerificationCode } from '../models/LoginViaVerificationCode'
import { SendPasswordResetEmailResponse } from '../models/SendPasswordResetEmailResponse'
import { UpdateUserInfosResponse } from '../models/UpdateUserInfosResponse'
import { LoginResponse } from '../models/LoginResponse'
import { User } from '../models/User'
import encode from '../../jwt/encode'
import {
ChangePasswordArgs,
CheckUsernameArgs,
@ -19,8 +20,8 @@ import { apiPost, apiGet } from '../../apis/loginAPI'
@Resolver()
export class UserResolver {
@Query(() => LoginResponse)
async login(@Args() { email, password }: UnsecureLoginArgs): Promise<LoginResponse> {
@Query(() => User)
async login(@Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any): Promise<User> {
email = email.trim().toLowerCase()
const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, password })
@ -29,7 +30,9 @@ export class UserResolver {
throw new Error(result.data)
}
return new LoginResponse({ sessionId: result.data.session_id, user: result.data.user })
context.setHeaders.push({ key: 'token', value: encode(result.data.session_id) })
return new User(result.data.user)
}
@Query(() => LoginViaVerificationCode)

View File

@ -72,7 +72,6 @@
"vue-good-table": "^2.21.3",
"vue-i18n": "^8.22.4",
"vue-jest": "^3.0.7",
"vue-jwt-decode": "^0.1.0",
"vue-loading-overlay": "^3.4.2",
"vue-moment": "^4.1.0",
"vue-qrcode": "^0.3.5",

View File

@ -3,15 +3,12 @@ import gql from 'graphql-tag'
export const login = gql`
query($email: String!, $password: String!) {
login(email: $email, password: $password) {
token
user {
email
username
firstName
lastName
language
description
}
email
username
firstName
lastName
language
description
}
}
`

View File

@ -1,7 +1,6 @@
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
// import VueJwtDecode from 'vue-jwt-decode'
Vue.use(Vuex)
@ -31,15 +30,12 @@ export const mutations = {
export const actions = {
login: ({ dispatch, commit }, data) => {
// const decoded = VueJwtDecode.decode(data.token)
const { user } = data
commit('token', data.token)
commit('email', user.email)
commit('language', user.language)
commit('username', user.username)
commit('firstName', user.firstName)
commit('lastName', user.lastName)
commit('description', user.description)
commit('email', data.email)
commit('language', data.language)
commit('username', data.username)
commit('firstName', data.firstName)
commit('lastName', data.lastName)
commit('description', data.description)
},
logout: ({ commit, state }) => {
commit('token', null)

View File

@ -1,15 +1,4 @@
import { mutations, actions } from './store'
import VueJwtDecode from 'vue-jwt-decode'
jest.mock('vue-jwt-decode')
VueJwtDecode.decode.mockReturnValue({
email: 'user@example.org',
language: 'de',
username: 'peter',
firstName: 'Peter',
lastName: 'Lustig',
description: 'Nickelbrille',
})
const { language, email, token, username, firstName, lastName, description } = mutations
const { login, logout } = actions
@ -78,55 +67,47 @@ describe('Vuex store', () => {
const commit = jest.fn()
const state = {}
const commitedData = {
token: 'token',
user: {
email: 'user@example.org',
language: 'de',
username: 'peter',
firstName: 'Peter',
lastName: 'Lustig',
description: 'Nickelbrille',
},
email: 'user@example.org',
language: 'de',
username: 'peter',
firstName: 'Peter',
lastName: 'Lustig',
description: 'Nickelbrille',
}
it('calls seven commits', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenCalledTimes(7)
})
it('commits token', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(1, 'token', 'token')
expect(commit).toHaveBeenCalledTimes(6)
})
it('commits email', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(2, 'email', 'user@example.org')
expect(commit).toHaveBeenNthCalledWith(1, 'email', 'user@example.org')
})
it('commits language', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(3, 'language', 'de')
expect(commit).toHaveBeenNthCalledWith(2, 'language', 'de')
})
it('commits username', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(4, 'username', 'peter')
expect(commit).toHaveBeenNthCalledWith(3, 'username', 'peter')
})
it('commits firstName', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(5, 'firstName', 'Peter')
expect(commit).toHaveBeenNthCalledWith(4, 'firstName', 'Peter')
})
it('commits lastName', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(6, 'lastName', 'Lustig')
expect(commit).toHaveBeenNthCalledWith(5, 'lastName', 'Lustig')
})
it('commits description', () => {
login({ commit, state }, commitedData)
expect(commit).toHaveBeenNthCalledWith(7, 'description', 'Nickelbrille')
expect(commit).toHaveBeenNthCalledWith(6, 'description', 'Nickelbrille')
})
})