diff --git a/js/CommonComponents.js b/js/CommonComponents.js
index b8407ae..1ed65ed 100644
--- a/js/CommonComponents.js
+++ b/js/CommonComponents.js
@@ -15,6 +15,8 @@ import { connect } from 'react-redux'
import React from "react";
+import { logout } from './api'
+
export function BigImage(props) {
return (
@@ -74,23 +76,14 @@ function Betabadge() {
class InvisibleLoginLogoutButtons extends React.Component {
- logoutClick() {
- console.log("Logged out.");
-
- /*
- /users/sign_out <- DELETE Token invalidieren
- /users/validate_token <- GET Token valide?
- */
- }
-
render() {
- const { isSignedIn, username, logout } = this.props
+ const { isSignedIn, username } = this.props
if(isSignedIn) {
return (
-
+
);
} else {
diff --git a/js/api.js b/js/api.js
index 9f45781..79a686c 100644
--- a/js/api.js
+++ b/js/api.js
@@ -17,6 +17,8 @@ const actiontypes_userinfo = {
'LOGIN_RESULT_SUCCESS' : 'LOGIN_RESULT_SUCCESS',
'LOGIN_RESULT_ERROR' : 'LOGIN_RESULT_ERROR',
+ 'LOGOUT' : 'LOGOUT',
+
'STORE_AUTH_HEADERS' : 'STORE_AUTH_HEADERS',
'REHYDRATE' : 'USERINFO_REHYDRATE',
@@ -34,31 +36,30 @@ const defaultstate_userinfo = {
uid : null
}
-export function postRequest(url, data) {
+export function postRequest(state, url, data) {
return axios.post(api_url + url, data, {
- headers : generateHeaders()
+ headers : generateHeaders(state)
});
}
-export function getRequest(url, data) {
+export function getRequest(state, url, data) {
return axios.get(api_url + url, data, {
- headers : generateHeaders()
+ headers : generateHeaders(state)
});
}
-export function deleteRequest(url, data) {
+export function deleteRequest(state, url, data) {
return axios.delete(api_url + url, data, {
- headers : generateHeaders()
+ headers : generateHeaders(state)
});
}
-function generateHeaders() {
- var userinfostate = __store.getState().userinfo;
- if(userinfostate.isSignedIn) {
+function generateHeaders(state) {
+ if(state.isSignedIn) {
return {
- 'access-token' : userinfostate.accesstoken,
- 'client' : userinfostate.client,
- 'uid' : userinfostate.uid
+ 'access-token' : state.accesstoken,
+ 'client' : state.client,
+ 'uid' : state.uid
};
} else {
return {};
@@ -81,6 +82,9 @@ function storeOptionalToken(response) {
function checkForAuthenticationHeaders(response) {
if(response.headers) {
+
+ console.log(response);
+
const requiredHeaders = [
'access-token', 'client', 'uid', 'expiry', // TODO: Add last header that is required (I don't remember it right now lol)
];
@@ -97,7 +101,7 @@ function checkForAuthenticationHeaders(response) {
const reducer_userinfo = (state = defaultstate_userinfo, action) => {
switch(action.type) {
case actiontypes_userinfo.REGISTER:
- postRequest('/users', {
+ postRequest(state, '/users', {
'username' : action.parameters.username,
'email' : action.parameters.email,
'password' : action.parameters.password
@@ -138,7 +142,7 @@ const reducer_userinfo = (state = defaultstate_userinfo, action) => {
errorMessages : action.parameters.errorMessages
});
case actiontypes_userinfo.LOGIN:
- postRequest('/users/sign_in', {
+ postRequest(state, '/users/sign_in', {
email : action.parameters.email,
password : action.parameters.password
}).then((resp) => {
@@ -180,7 +184,20 @@ const reducer_userinfo = (state = defaultstate_userinfo, action) => {
error : true,
errorMessages : action.parameters.errorMessages
});
+
+ case actiontypes_userinfo.LOGOUT:
+ return Object.assign({}, state, {
+ isSignedIn : false,
+ username : null,
+
+ accesstoken : null,
+ client : null,
+ expiry : null,
+ uid : null
+ });
+
case actiontypes_userinfo.STORE_AUTH_HEADERS:
+ console.log("Token has been stored.");
return Object.assign({}, state, {
accesstoken : action.parameters.accesstoken,
client : action.parameters.client,
@@ -242,6 +259,10 @@ export function login(email, password) {
})
}
+export function logout() {
+ __store.dispatch({ type : actiontypes_userinfo.LOGOUT });
+}
+
export function getState() {
return __store.getState();
}
diff --git a/pages/login.js b/pages/login.js
index 20fd2cc..2c9ee22 100644
--- a/pages/login.js
+++ b/pages/login.js
@@ -3,6 +3,8 @@ import '../static/everypage.css'
import {Footer, TurniereNavigation} from "../js/CommonComponents";
import React from "react";
import {Button, Card, CardBody, Container, Form, FormGroup, Input, Label} from "reactstrap";
+import { login } from '../js/api'
+import { connect } from 'react-redux'
export default () => (
@@ -34,18 +36,75 @@ function Login() {
);
}
-function LoginForm() {
- return (
-
- );
+class LoginErrorList extends React.Component {
+
+ render() {
+ const { error, errorMessages } = this.props;
+ if(error) {
+ return (
+
+ { errorMessages.map((message, index) =>
+ -
+
+ {message}
+
+
+ ) }
+
+ );
+ } else {
+ return null;
+ }
+ }
+}
+
+const mapStateToErrorMessages = (state) => {
+ const { errorMessages, error } = state.userinfo;
+ return { errorMessages, error }
+};
+
+const VisibleLoginErrorList = connect(
+ mapStateToErrorMessages
+)(LoginErrorList);
+
+
+class LoginForm extends React.Component {
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ email : '',
+ password : ''
+ };
+ }
+
+ render() {
+ return (
+
+ );
+ }
+
+ handlePasswordInput(input) {
+ this.setState({ password : input.target.value });
+ }
+
+ handleEmailInput(input) {
+ this.setState({ email : input.target.value });
+ }
}
\ No newline at end of file
diff --git a/pages/register.js b/pages/register.js
index 4a03dd9..e622716 100644
--- a/pages/register.js
+++ b/pages/register.js
@@ -3,6 +3,7 @@ import '../static/everypage.css'
import {Footer, TurniereNavigation} from "../js/CommonComponents";
import React from "react";
import {Button, Card, CardBody, Container, Form, FormGroup, FormText, Input, Label} from "reactstrap";
+import { register } from '../js/api'
export default () => (
@@ -34,30 +35,65 @@ function Register() {
);
}
-function RegisterForm() {
- return (
-
- );
+class RegisterForm extends React.Component {
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ username : '',
+ email : '',
+ password : ''
+ };
+ }
+
+ handleRegisterClick(state) {
+ const { username, email, password } = state;
+
+ console.log(state);
+
+ console.log(username);
+ console.log(email);
+ console.log(password);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+
+ handlePasswordInput(input) {
+ this.setState({ password : input.target.value });
+ }
+
+ handleEmailInput(input) {
+ this.setState({ email : input.target.value });
+ }
+
+ handleUsernameInput(input) {
+ this.setState({ username : input.target.value });
+ }
}
function AccountRequirementMarketing() {