如何从响应中获取令牌?

时间:2019-09-24 07:34:58

标签: json typescript antd dvajs umijs

在这种环境下,我相对较新。我将React和Typescript与“ Ant design pro 4”一起用于新项目。

我成功地将我的IdentityServer 4称为登录令牌。我在浏览器中看到了我的回复。

token

status

但是如何在我的代码中获取令牌?

import { Reducer } from 'redux';
import { Effect } from 'dva';

export interface StateType {
  status?: 'ok' | 'error';
  jsonRes: string;
  type?: string;
  currentAuthority?: 'user' | 'guest' | 'admin';
}

export interface LoginModelType {
  namespace: string;
  state: StateType;
  effects: {
    login: Effect;
  };
  reducers: {
    changeLoginStatus: Reducer<StateType>;
  };
}

const Model: LoginModelType = {
  namespace: 'login',

  state: {
    // status: undefined,
    jsonRes: '',
  },

  effects: {
    * login({ payload }, { call, put }) {
      const response = yield call(accountLogin, payload);

      yield put({
        type: 'changeLoginStatus',
        payload: response,
      });
    },
  },

  reducers: {
    changeLoginStatus(state, { payload }) {
      return {
        ...state,

        jsonRes: payload.json, //not work
      };
    },
  },
};

export default Model;

编辑: 也许有帮助。

export async function accountLogin(params: LoginParamsType) {
  const sendData = `grant_type=password&username=${params.userName}&password=${params.password}& ........`; 
  const retValue = request('https://localhost:44308/connect/token', {
    method: 'POST',
    data: sendData,
    mode: 'no-cors',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: 'string',
  });
  return retValue;
}

2 个答案:

答案 0 :(得分:0)

使用payload.json()。它将读取响应流以完成操作并将响应解析为json。

答案 1 :(得分:0)

我确定您现在已经知道了,但是无论如何这里都可以

reducers: {
    changeLoginStatus(state, { payload }) {
      return {
        ...state,

        jsonRes: payload.access_token, //<--this should do it
      };
    },

调用const response = yield call(accountLogin, payload);时,它将获得在调试窗口中看到的输出。

希望有帮助。