我有两台机器:AuthenticationMachine
和AddressMachine
。AuthenticationMachine 由 使用,Login component
而 AddressMachine 由 使用Address component
。但是我需要token
从 Address 组件中的 AuthenticationMachine 与 AddressMachine 一起使用。我试过Actor
在 AuthenticationMachine 中生成一个,但它没有用。
认证机
const createService = (context: {token: string}) => {
return Machine({
id: 'service',
initial: 'logged_in',
states: {
logged_in: {},
logged_out: {},
},
}).withContext(context);
};
const authenticationMachine = Machine(
{
id: 'authenticationMachine',
initial: 'unauthenticated',
context: {
token: undefined,
error: undefined,
service: undefined,
},
states: {
unauthenticated: {
on: {
LOGIN: 'authenticating',
},
},
authenticating: {
invoke: {
src: 'login',
onDone: {
target: 'loggedIn',
actions: assign({
token: (ctx, event: any) => event.data.access_token,
service: (ctx, event) => {
return spawn(createService({token: event.data.access_token}));
},
}),
},
onError: {
target: 'unauthenticated',
actions: assign({
error: (ctx, event: any) => event.data,
}),
},
},
},
loggedIn: {
on: {
LOGOUT: 'unauthenticated'
},
},
},
},
);