Implement signup in Ember

Closes #2410

- Add signup action that posts to signup endpoint
- Fix nav bar showing on signup page
- Fix image link when a user hasn't set their image yet
- Redirect to the ember/signin page if requesting an ember page
This commit is contained in:
Jacob Gable 2014-05-14 20:24:49 -05:00
parent 11cf0ae125
commit 006aedfb84
6 changed files with 57 additions and 7 deletions

View File

@ -1,5 +1,6 @@
var ApplicationController = Ember.Controller.extend({
isSignedIn: Ember.computed.bool('user.isSignedIn'),
hideNav: Ember.computed.match('currentPath', /(signin|signup|forgotten|reset)/),
actions: {
toggleMenu: function () {

View File

@ -1,7 +1,47 @@
import ajax from 'ghost/utils/ajax';
import styleBody from 'ghost/mixins/style-body';
var SignupRoute = Ember.Route.extend(styleBody, {
classNames: ['ghost-signup']
classNames: ['ghost-signup'],
name: null,
email: null,
password: null,
actions: {
signup: function () {
var self = this,
controller = this.get('controller'),
data = controller.getProperties('name', 'email', 'password');
// TODO: Validate data
if (data.name && data.email && data.password) {
ajax({
url: '/ghost/signup/',
type: 'POST',
headers: {
'X-CSRF-Token': this.get('csrf')
},
data: data
}).then(function (resp) {
if (resp && resp.userData) {
self.send('signedIn', resp.userData);
self.notifications.clear();
self.transitionTo('posts');
} else {
self.transitionTo('signin');
}
}, function (resp) {
self.notifications.showAPIError(resp);
});
} else {
this.notifications.showError('Must provide name, email and password');
}
}
}
});
export default SignupRoute;

View File

@ -10,7 +10,11 @@
<li id="usermenu" class="usermenu subnav">
<a href="javascript:void(0);" {{action 'toggleMenu'}} class="dropdown">
{{#if user.image}}
<img class="avatar" {{bind-attr src="user.image"}} alt="Avatar" />
{{else}}
<img class="avatar" src="/shared/img/user-image.png" alt="Avatar" />
{{/if}}
<span class="name">{{user.name}}</span>
</a>
{{!-- @TODO: add functionality to allow for dropdown to work --}}

View File

@ -1,6 +1,6 @@
{{#if isSignedIn}}
{{#unless hideNav}}
{{partial "navbar"}}
{{/if}}
{{/unless}}
<main role="main" id="main">
{{ghost-notifications}}

View File

@ -1,14 +1,14 @@
<section class="signup-box js-signup-box fade-in">
<form id="signup" class="signup-form" method="post" novalidate="novalidate">
<div class="name-wrap">
<input class="name" type="text" placeholder="Full Name" name="name" autofocus autocorrect="off" />
{{input class="name" type="text" placeholder="Full Name" name="name" autofocus="autofocus" autocorrect="off" value=name }}
</div>
<div class="email-wrap">
<input class="email" type="email" placeholder="Email Address" name="email" autocapitalize="off" autocorrect="off" />
{{input class="email" type="email" placeholder="Email Address" name="email" autocapitalize="off" autocorrect="off" value=email }}
</div>
<div class="password-wrap">
<input class="password" type="password" placeholder="Password" name="password" />
{{input class="password" type="password" placeholder="Password" name="password" value=password }}
</div>
<button class="button-save" type="submit">Sign Up</button>
<button class="button-save" type="submit" {{action "signup"}}>Sign Up</button>
</form>
</section>

View File

@ -79,6 +79,11 @@ var middleware = {
}
redirect = '?r=' + encodeURIComponent(reqPath);
}
if (subPath.indexOf('/ember') > -1) {
return res.redirect(config().paths.subdir + '/ghost/ember/signin');
}
return res.redirect(config().paths.subdir + '/ghost/signin/' + redirect);
});
}