client/src/misc/AuthenticatedRoute.js
author Alexandre Segura <mex.zktk@gmail.com>
Thu, 29 Jun 2017 12:05:09 +0200
changeset 105 0a1d6560acac
child 129 d48946d164c6
permissions -rw-r--r--
Introduce authenticated routes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
105
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
// see https://gist.github.com/fdidron/ebcf52dc1ed62ff7d80725854d631a9e
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import PropTypes from 'prop-types';
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
import React from 'react';
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
import { Redirect, Route } from 'react-router';
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
const AuthenticatedRoute = ({component, ...props}) => {
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
  const { store } = props;
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
  const state = store.getState();
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
  const isAuthenticated = state.isAuthenticated;
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
  if (isAuthenticated) {
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
    return <Route { ...props } component={ component } />;
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
  }
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
  return <Redirect to="/login" />;
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
};
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
AuthenticatedRoute.propTypes = {
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
  component: PropTypes.oneOfType([
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    22
    PropTypes.element,
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    23
    PropTypes.func
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    24
  ])
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    25
};
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    26
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
export default AuthenticatedRoute;