2

我在这个环境中比较新。我将“Ant design pro 4”与 React 和 Typescript 一起用于一个新项目。

我成功调用我的 IdentityServer 4 以获得登录令牌。我在浏览器中看到我的回复。

令牌

地位

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

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;
}
4

2 回答 2

0

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

于 2019-09-24T07:43:00.060 回答
0

我敢肯定你现在已经想通了,但不管怎样

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

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

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

希望有帮助。

于 2019-12-30T03:17:32.753 回答