Added a testing sign in method for Redux.

This commit is contained in:
Patrick Fic
2020-08-05 22:04:23 -07:00
parent 53360b1d5e
commit 481daac70c
8 changed files with 579 additions and 188 deletions

View File

@@ -1,28 +1,20 @@
import Fingerprint2 from "fingerprintjs2";
import LogRocket from "logrocket";
import { all, call, delay, put, select, takeLatest } from "redux-saga/effects";
import { all, call, put, takeLatest } from "redux-saga/effects";
import {
auth,
firestore,
getCurrentUser,
logImEXEvent,
updateCurrentUser,
} from "../../firebase/firebase.utils";
import {
checkInstanceId,
setInstanceConflict,
setInstanceId,
setLocalFingerprint,
sendPasswordResetFailure,
sendPasswordResetSuccess,
signInFailure,
signInSuccess,
signOutFailure,
signOutSuccess,
unauthorizedUser,
updateUserDetailsSuccess,
sendPasswordResetFailure,
sendPasswordResetSuccess,
validatePasswordResetSuccess,
validatePasswordResetFailure,
validatePasswordResetSuccess,
} from "./user.actions";
import UserActionTypes from "./user.types";
@@ -31,10 +23,8 @@ export function* onEmailSignInStart() {
}
export function* signInWithEmail({ payload: { email, password } }) {
try {
logImEXEvent("redux_sign_in_attempt", { user: email });
//logImEXEvent("redux_sign_in_attempt", { user: email });
const { user } = yield auth.signInWithEmailAndPassword(email, password);
yield put(
signInSuccess({
uid: user.uid,
@@ -46,7 +36,7 @@ export function* signInWithEmail({ payload: { email, password } }) {
);
} catch (error) {
yield put(signInFailure(error));
logImEXEvent("redux_sign_in_failure", { user: email, error });
//logImEXEvent("redux_sign_in_failure", { user: email, error });
}
}
@@ -55,7 +45,7 @@ export function* onCheckUserSession() {
}
export function* isUserAuthenticated() {
try {
logImEXEvent("redux_auth_check");
//logImEXEvent("redux_auth_check");
const user = yield getCurrentUser();
if (!user) {
@@ -63,7 +53,6 @@ export function* isUserAuthenticated() {
return;
}
LogRocket.identify(user.email);
yield put(
signInSuccess({
uid: user.uid,
@@ -82,7 +71,7 @@ export function* onSignOutStart() {
}
export function* signOutStart() {
try {
logImEXEvent("redux_sign_out");
//logImEXEvent("redux_sign_out");
yield auth.signOut();
yield put(signOutSuccess());
@@ -104,65 +93,13 @@ export function* updateUserDetails(userDetails) {
//TODO error handling
}
}
export function* onSetInstanceId() {
yield takeLatest(UserActionTypes.SET_INSTANCE_ID, setInstanceIdSaga);
}
export function* setInstanceIdSaga({ payload: uid }) {
try {
const userInstanceRef = firestore.doc(`userInstance/${uid}`);
const fingerprint = Fingerprint2.x64hash128(
(yield Fingerprint2.getPromise({})).map((c) => c.value).join(""),
31
);
yield userInstanceRef.set({
timestamp: new Date(),
fingerprint,
});
yield put(setLocalFingerprint(fingerprint));
yield delay(5 * 60 * 1000);
yield put(checkInstanceId(uid));
} catch (error) {
console.log("error", error);
//yield put(signOutFailure(error.message));
//TODO error handling
}
}
export function* onCheckInstanceId() {
yield takeLatest(UserActionTypes.CHECK_INSTANCE_ID, checkInstanceIdSaga);
}
export function* checkInstanceIdSaga({ payload: uid }) {
try {
const userInstanceRef = firestore.doc(`userInstance/${uid}`);
const snapshot = yield userInstanceRef.get();
let fingerprint = yield select((state) => state.user.fingerprint);
if (snapshot.data().fingerprint === fingerprint) {
yield delay(5 * 60 * 1000);
yield put(checkInstanceId(uid));
} else {
console.log("ERROR: Fingerprints do not match. Conflict detected.");
logImEXEvent("instance_confict");
yield put(setInstanceConflict());
}
} catch (error) {
console.log("error", error);
//TODO error handling
}
}
export function* onSignInSuccess() {
yield takeLatest(UserActionTypes.SIGN_IN_SUCCESS, signInSuccessSaga);
}
export function* signInSuccessSaga({ payload }) {
LogRocket.identify(payload.email);
yield put(setInstanceId(payload.uid));
yield logImEXEvent("redux_sign_in_success");
//yield logImEXEvent("redux_sign_in_success");
}
export function* onSendPasswordResetStart() {
@@ -176,7 +113,6 @@ export function* sendPasswordResetEmail({ payload }) {
yield auth.sendPasswordResetEmail(payload, {
url: "https://imex.online/passwordreset",
});
console.log("Good should send.");
yield put(sendPasswordResetSuccess());
} catch (error) {
yield put(sendPasswordResetFailure(error.message));
@@ -194,7 +130,6 @@ export function* validatePasswordResetStart({ payload: { password, code } }) {
yield auth.confirmPasswordReset(code, password);
yield put(validatePasswordResetSuccess());
} catch (error) {
console.log("function*validatePasswordResetStart -> error", error);
yield put(validatePasswordResetFailure(error.message));
}
}
@@ -205,8 +140,7 @@ export function* userSagas() {
call(onCheckUserSession),
call(onSignOutStart),
call(onUpdateUserDetails),
call(onSetInstanceId),
call(onCheckInstanceId),
call(onSignInSuccess),
call(onSendPasswordResetStart),
call(onValidatePasswordResetStart),