Skip to content

Instantly share code, notes, and snippets.

@yusugomori
Created April 10, 2012 04:03
Show Gist options
  • Save yusugomori/2348251 to your computer and use it in GitHub Desktop.
Save yusugomori/2348251 to your computer and use it in GitHub Desktop.
User auth in SocketStream
#
# 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