Chcę zaimplementować nową blokadę Auth0 10 w mojej aplikacji React/Redux.Wysłanie akcji na zdarzenie lock.on ('authenticated') Auth0
Sprawdziłem w Internecie, ale nic nie pasuje do mojego pytania. Jest tutorial here, ale używa trybu Popup zamiast trybu przekierowania (domyślnie teraz). Innym one analizuje URL, który jest bezużyteczny w Lock 10.
oto przepływ:
- Auth0Lock dostaje instancję kiedy moja aplikacja rozpoczyna
- Kiedy użytkownik kliknie przycisk logowania, to pokazuje Blokada widget (
lock.show()
) i wywołuje LOGIN_REQUEST - Blokada robi swoje uwierzytelnienie na auth0.com (przekierowuje z moim localhost)
- Przekierowanie z powrotem do mojego localhost po udanym logowaniu Auth0Lock dostać instantia Ted ponownie
- czekam na zdarzenie
lock.on('authenticated')
wysyłką LOGIN_SUCCESS
I tu jest moje działania/code index.js:
import Auth0Lock from 'auth0-lock'
export const LOGIN_REQUEST = 'LOGIN_REQUEST'
export const LOGIN_SUCCESS = 'LOGIN_SUCCESS'
export const LOGIN_ERROR = 'LOGIN_ERROR'
function loginRequest() {
return {
type: LOGIN_REQUEST
}
}
function loginSuccess(profile) {
return {
type: LOGIN_SUCCESS,
profile
}
}
function loginError(error) {
return {
type: LOGIN_ERROR,
error
}
}
// import AuthService to deal with all the actions related to auth
const lock = new Auth0Lock('secret', 'secret', {
auth: {
redirectUrl: 'http://localhost:3000/callback',
responseType: 'token'
}
})
lock.on('authenticated', authResult => {
console.log('Im authenticated')
return dispatch => {
return dispatch(loginSuccess({}))
}
})
lock.on('authorization_error', error => {
return dispatch => dispatch(loginError(error))
})
export function login() {
lock.show()
return dispatch => {return dispatch(loginRequest())}
}
Teraz po kliknięciu na przycisk logowania, Redux pokazy logger akcja LOGIN_REQUEST wysłana, widzę widżet blokady, mogę się zalogować, przekierowuje do auth0.com, a następnie z powrotem do mojego localhost:3000/callback
z ładnym tokenem. Wszystko jest w porządku, widzę komunikat Im authenticated
w mojej konsoli, ale program rejestrujący redux nie pokazuje mi, że akcja LOGIN_SUCCESS została wywołana.
Jestem nowy w Redux i chyba zgubiłem jedną rzecz, ale nie mogę się jej pozbyć. Dzięki!
W porządku.Ale w moim przypadku umieszczam akcje w osobnym pliku actions.js, a jeśli dobrze rozumiem, wywoływanie tego pliku z pliku jest antykreśleniem. W takim przypadku powinienem raczej zainicjować 'const lock = new Auth0Lock (...)' wewnątrz pliku actions.js, lub w komponencie takim jak składnik App? – amaurymartiny
To tam mój brak wiedzy React nie pozwoli mi wyrazić żadnej opinii. –
W końcu zrobiłem to w actions.js, zobacz tutaj kod: https://github.com/amaurymartiny/react-redux-auth0-kit/blob/master/src/actions/auth.js – amaurymartiny