Created
April 10, 2012 04:03
-
-
Save yusugomori/2348251 to your computer and use it in GitHub Desktop.
User auth in SocketStream
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# This gist contains both server side and client side scripts. | |
# | |
# Server: | |
# /server/rpc/auth.coffee | |
# /server/rpc/models/user.coffee | |
# | |
# Client: | |
# /client/code/modules/auth.coffee | |
# /client/code/app.coffee | |
# Server Side | |
# /server/rpc/auth.coffee | |
exports.actions = (req, res, ss) -> | |
req.use('session') | |
User = require('./models/user').User # See codes below: /server/rpc/models/user.coffee | |
getCurrentUser: () -> | |
if req.session? and req.session.userId? | |
User.findOne {userId: req.session.userId}, (error, user) -> | |
unless error? | |
if user? | |
res user | |
else | |
@user = new User() | |
@user.userId = req.session.userId | |
@user.name = req.session.name | |
@user.save (error) => | |
unless error? | |
res @user | |
else | |
res false | |
else | |
res error | |
else | |
res false | |
# /server/rpc/models/user.coffee | |
mongoose = require 'mongoose' | |
Schema = mongoose.Schema | |
UserSchema = new Schema | |
name: String, | |
userId: String, | |
createdAt: {type: Date, default: Date.now} | |
mongoose.model 'User', UserSchema | |
mongoose.connect 'mongodb://localhost/MY_DATABASE_NAME' | |
module.exports.User = mongoose.model 'User' | |
module.exports.UserSchema = UserSchema | |
# Client Side | |
# /client/code/modules/auth.coffee | |
exports.getCurrentUser = (cb) -> | |
ss.rpc('auth.getCurrentUser', cb) # /server/rpc/auth.coffee をclient側で使う。 | |
# /client/code/app.coffee | |
# 簡単のため、HTは使っていない。使う場合は、 /client/templates/* にViewファイルを置く。 | |
# 例えば /client/templates/users/show.jade を読み込む場合は、 html = HT['users-show'].render({}) とすればよい。 | |
window.MyApp ?= {} | |
MyApp ?= window.MyApp | |
class MyApp.View | |
constructor: () -> | |
@auth = require('auth') # imports /client/code/modules/auth.coffee | |
getCurrentUser: () -> | |
@auth.getCurrentUser (u) => | |
if u is false | |
@showLoginView() | |
else | |
@showUserView(u) | |
showUserView: (u) -> | |
$('body').empty().append "Welcome, #{u.name}!" | |
showLoginView: () -> | |
$('body').empty().append "<a href=\"/login\">Login page</a>" | |
SocketStream.event.on 'ready', -> | |
View = new MyApp.View() | |
View.getCurrentUser() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment