这回贷已经贬值 代码被转移了! 见 强制 新地点.
艺术护照
给Arthy的普通认证处理器和相关的安全隐患 埃泽尔- 使用 护照在Artsy公司内部使用到 DRY 认证代码.
中断更改
我们把这个应用程序从模块"artsy-passport"迁移到"@artsy/passport",并称之为v1.
设置
确定您先挂起会话、 身体剖析器并开始 @ artsy/ xapp。 。 。 .
app.use express.bodyParser()
app.use express.cookieParser('foobar')
app.use express.cookieSession()
artsyXapp.init -> app.listen()
然后搭乘Artsy Passport通过一个大型的配置散列.
数值表示默认值.
app.use artsyPassport
CurrentUser: # The CurrentUser Backbone model
# Pass in env vars
# ----------------
FACEBOOK_ID: # Facebook app ID
FACEBOOK_SECRET: # Facebook app secret
ARTSY_ID: # Artsy client id
ARTSY_SECRET: # Artsy client secret
ARTSY_URL: # SSL Artsy url e.g. https://artsy.net
APP_URL: # Url pointing back to your app e.g. http://flare.artsy.net
SEGMENT_WRITE_KEY: # Segment write key to track signup
# Defaults you probably don't need to touch
# -----------------------------------------
# Social auth
facebookPath: '/users/auth/facebook'
facebookCallbackPath: '/users/auth/facebook/callback'
# Landing pages
loginPagePath: '/log_in'
signupPagePath: '/sign_up'
settingsPagePath: '/user/edit'
afterSignupPagePath: '/personalize'
# Misc
logoutPath: '/users/sign_out'
userKeys: [
'id', 'type', 'name', 'email', 'phone', 'lab_features',
'default_profile_id', 'has_partner_access', 'collector_level'
]
键是按键的,所以在配置散列中通过是方便的. 最起码的设定可能是这样的:
app.use artsyPassport _.extend config,
CurrentUser: CurrentUser
说明: 当前用户必须是具有典型的 Backbone 模型 get 财务报告和审定财务报表 toJSON 方法。 。 .
创建指向路径的登录窗体.
h1 Login
pre!= error
a( href=ap.facebookPath ) Login via Facebook
form( action=ap.loginPagePath, method='POST' )
h3 Login via Email
input( name='name' )
input( name='email' )
input( name='password' )
input( type="hidden" name="_csrf" value=csrfToken )
button( type='submit' ) Login
可能还有报名表...
h1 Signup
pre!= error
a( href=ap.facebookPath ) Signup via Facebook
form( action=ap.signupPagePath, method='POST' )
h3 Signup via Email
input( name='name' )
input( name='email' )
input( name='password' )
input( type="hidden" name="_csrf" value=csrfToken )
button( type='submit' ) Signup
也许还有连接账户的设置页面...
h2 Linked Accounts
pre!= error
- providers = user.get('authentications').map(function(a) { return a.provider })
if providers.indexOf('facebook') > -1
| Connected Facebook
else
a( href=ap.facebookPath ) Connect Facebook
翻出页面
{ loginPagePath, signupPagePath, settingsPagePath, afterSignupPagePath } = artsyPassport.options
app.get loginPagePath, (req, res) -> res.render 'login'
app.get signupPagePath, (req, res) -> res.render 'signup'
app.get settingsPagePath, (req, res) -> res.render 'settings'
app.get afterSignupPagePath, (req, res) -> res.render 'personalize'
以各种方式访问在Artsy用户中登录的...
在您的服务器侧模板中
h1 Hello #{user.get('name')}
在您的客户端代码中
CurrentUser = require '../models/current_user.coffee'
sd = require('sharify').data
user = new CurrentUser(sd.CURRENT_USER)
在您的路由器中
app.get '/', (req, res) ->
res.send 'Hello ' + req.user.get('name')
这些形式的用户如果不登录,将无效.
调整方向
如果您执行一个涉及客户端重定向的扇形认证流, 您可能会发现这个帮助器对避免 "打开方向" 攻击.
sanitizeRedirect = require 'artsy-passport/sanitize-redirect'
location.href = sanitizeRedirect "http://artsy.net%0D%0Aattacker.com/"
# Notices the url isn't pointing at artsy.net, so just redirects to /
捐款
添加一个 local.artsy.net 进入您的/etc/hosts
127.0.0.1 localhost
#...
127.0.0.1 local.artsy.net
安装节点模块 yarn 然后写一个 / 配置js 看起来像这样:
module.exports = {
FACEBOOK_ID: '',
FACEBOOK_SECRET: '',
ARTSY_ID: '',
ARTSY_SECRET: '',
ARTSY_URL: 'https://api.artsy.net',
APP_URL: 'http://local.artsy.net:4000',
// An Artsy user that's linked to Facebook
ARTSY_EMAIL: '[email protected]',
ARTSY_PASSWORD: '',
FACEBOOK_EMAIL: '[email protected]',
FACEBOOK_PASSWORD: '',
}
然后通过运行检查示例 yarn example 打开 本地主机: 4000。 。 。 .
测试是集成和中相器件单元测试的结合. 运行整个套房的使用 yarn test。 。 。 .
发布到 npm
yarn compile
yarn publish