diff --git a/config/default.js b/config/default.js index 62619336be6..f1515cb585e 100644 --- a/config/default.js +++ b/config/default.js @@ -26,6 +26,7 @@ module.exports = { // 2592000 is 30 days in seconds. cookieMaxAge: 2592000, cookieName: 'jwt_api_auth_token', + cookieSecure: true, isDeployed: true, isDevelopment: false, @@ -50,6 +51,7 @@ module.exports = { 'apiPath', 'cookieName', 'cookieMaxAge', + 'cookieSecure', 'isDeployed', 'isDevelopment', ], diff --git a/config/development.js b/config/development.js index f69bb2c5ae9..8f79b577540 100644 --- a/config/development.js +++ b/config/development.js @@ -14,6 +14,8 @@ module.exports = { isDeployed: false, isDevelopment: true, + cookieSecure: false, + serverPort: 3000, webpackServerHost, webpackServerPort, diff --git a/src/core/components/LoginPage/index.js b/src/core/components/LoginPage/index.js index a36b4d4fd43..96936f0835d 100644 --- a/src/core/components/LoginPage/index.js +++ b/src/core/components/LoginPage/index.js @@ -1,4 +1,5 @@ import React, { PropTypes } from 'react'; +import Helmet from 'react-helmet'; import { startLoginUrl } from 'core/api'; import { gettext as _ } from 'core/utils'; @@ -9,10 +10,12 @@ export default class LoginPage extends React.Component { } render() { + const title = _('Login Required'); const { message } = this.props; return (
{message || _('You must be logged in to access this page.')}
diff --git a/src/core/containers/HandleLogin/index.js b/src/core/containers/HandleLogin/index.js index a9a3eaf2454..89509eabb8a 100644 --- a/src/core/containers/HandleLogin/index.js +++ b/src/core/containers/HandleLogin/index.js @@ -55,7 +55,7 @@ function createLoadData(dispatch) { dispatch(setJWT(token)); cookie.save(config.get('cookieName'), token, { path: '/', - secure: true, + secure: config.get('cookieSecure'), maxAge: config.get('cookieMaxAge'), }); router.push('/search'); diff --git a/src/core/containers/LoginRequired/index.js b/src/core/containers/LoginRequired/index.js index e63d06463e8..0f7769922bc 100644 --- a/src/core/containers/LoginRequired/index.js +++ b/src/core/containers/LoginRequired/index.js @@ -2,29 +2,26 @@ import React, { PropTypes } from 'react'; import { connect } from 'react-redux'; import LoginPage from 'core/components/LoginPage'; -export function mapStateToProps(Component) { - return (state) => ({ +export function mapStateToProps(state) { + return { authenticated: !!state.auth.token, - Component, - }); + }; } +// This class is exported for testing outside of redux. export class LoginRequired extends React.Component { static propTypes = { authenticated: PropTypes.bool.isRequired, - // This is really a react component class but I guess that's a function. - Component: PropTypes.func.isRequired, + children: PropTypes.node, } render() { - const { authenticated, Component, ...childProps } = this.props; + const { authenticated, children } = this.props; if (authenticated) { - returnAuthenticated content.
; } } - describe('rendered component when not authenticated', () => { - it('renders