Skip to content

Instantly share code, notes, and snippets.

@yusugomori
Created April 6, 2012 08:43
Show Gist options
  • Save yusugomori/2318237 to your computer and use it in GitHub Desktop.
Save yusugomori/2318237 to your computer and use it in GitHub Desktop.
config/initializers/authentication.coffee
#
# config/initializers/authentication.coffee
#
everyauth = require "everyauth"
# Facebook App ID from config/credentials.coffee
unless Tower.env is 'production'
Tower.config.credentials.facebook.key = Tower.config.credentials.facebook.development.key
Tower.config.credentials.facebook.secret = Tower.config.credentials.facebook.development.secret
else
Tower.config.credentials.facebook.key = Tower.config.credentials.facebook.production.key
Tower.config.credentials.facebook.secret = Tower.config.credentials.facebook.production.secret
# Logout Handling
everyauth.everymodule.logoutPath('/logout')
everyauth.everymodule.logoutRedirectPath('/')
everyauth.everymodule.handleLogout (request, response) ->
request.logout()
request.session.userId = undefined # 独自に session.userId を作っているので、これも削除。
@redirect response, @logoutRedirectPath()
# Facebook Login
everyauth.facebook
.appId(Tower.config.credentials.facebook.key)
.appSecret(Tower.config.credentials.facebook.secret)
.scope('email') # 欲しいFacebookユーザーデータ。
.handleAuthCallbackError((request, response) ->
# Error Handling
# e.g. /auth/facebook/callback?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request
response.redirect("/login")
).findOrCreateUser((session, accessToken, accessTokenExtra, fbUserMetadata) ->
promise = @Promise()
User = App.User # app/models/user.coffee を使う。
User.where(userId: fbUserMetadata.id).first (error, record) => # DB検索。 facebookのidをuserIdとして保存している。
if error
return promise.fail(error)
if record.get? # 既存ユーザー
session.userId = record.get "userId"
session.save() # セッションに保存
promise.fulfill record.get "userId"
else # 新規ユーザー
User.createFromFacebook(session, accessToken, fbUserMetadata, promise)
return promise # promiseを返すことで、promise.fulfill() されるまで処理がブロックされる
).redirectPath('/')
@edubkendo
Copy link

"独自に session.userId を作っているので、これも削除。"
Loose translation:
Creates unique session.userId, eliminates this also.

" 欲しいFacebookユーザーデータ。"
Wants Facebook user data.

"app/models/user.coffee を使う。"
Uses app/models/user.coffee .

"DB検索。 facebookのidをuserIdとして保存している。"
Database retrieval. Preserves facebook id as userId.

"既存ユーザー"
Existence of user.

"セッションに保存"
Preserves session.

"promiseを返すことで、promise.fulfill() されるまで処理がブロックされる"
This returns a promise which is not yet fulfilled while process is running.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment