diff --git a/frontend/src/actions/Login.actions.js b/frontend/src/actions/Login.actions.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f845a7c0ec9fbc4eb7d29a7ee1dcf5195180185
--- /dev/null
+++ b/frontend/src/actions/Login.actions.js
@@ -0,0 +1,99 @@
+import { userService } from "../services/authentication.service";
+import {fetchUserData} from "./Profile.actions";
+
+export const getAuth = () => {
+    return {
+        type:'GET_AUTH'
+    }
+}
+
+export const logoutSuccess = () => {
+    return {
+        type:'LOGOUT_SUCCESS'
+    }
+}
+
+export const loginSuccessWaitForPayment = () => {
+    return {
+        type:'LOGIN_SUCCESS_WAIT_PAYMENT'
+    }
+}
+
+export const loginSuccesPaymentDone = () => {
+    return {
+        type:'LOGIN_SUCCESS_PAYMENT_DONE'
+    }
+}
+
+export const loginFailed = (message) => {
+    return {
+        type:'LOGIN_FAILED',
+        message: message
+    }
+}
+
+export const loginRequest = () => {
+    return {
+        type:'LOGIN_REQUEST'
+    }
+}
+
+export const login = (loginData, ownProps) => {
+    return async (dispatch) => {
+        dispatch(loginRequest());
+
+        const response = await fetch( "/api/login", {
+            method: 'POST',
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+            },
+            body: JSON.stringify(loginData),
+        })
+
+        if(response.ok){
+            response.json().then(data => {
+                userService.setToken(data.token);
+                let user = dispatch(fetchUserData());
+                //dispatch(user);
+                ownProps.history.push('/');
+
+
+                // TODO: do another request to know if user paid adhesion
+                // make request to get user data 
+                
+
+                var paid=true;
+                
+                
+                if(paid){
+                    userService.setAdhesion(true);
+                    dispatch(loginSuccesPaymentDone(data));
+                } else {
+                    userService.setToken(false);
+                    dispatch(loginSuccessWaitForPayment(data));
+                }
+            }).catch(err => dispatch(loginFailed(err)));
+        }
+        else{
+            response.json().then(error => {
+                dispatch(loginFailed(error));
+            }).catch(err => dispatch(loginFailed(err)));
+        }
+
+        return response;
+    }
+}
+
+export const logout = () => {
+    return (dispatch) => {
+        userService.logout();
+        dispatch(logoutSuccess());
+    }
+}
+
+export const reinitializeState = () => {
+    return {
+        type:'REINITIALIZE_STATE'
+    }
+}