あなたが説明したことに基づいてauth_token
、ブラウザーのセッション Cookie に保存するのが良い方法のようです。
Backbone.js は Cookie 操作をサポートしていません。ただし、jQuery プラグインを使用するか、独自の Cookie マニピュレータを記述してこれを処理できます。
jquery-cookie
( https://github.com/carhartl/jquery-cookie )を使用していると仮定すると、これを達成する方法の例を次に示します(Wikiにもあります!):
$.cookie('auth_token', authTokenValue);
対話する API については、API が をどのように受け入れるかによって異なります。自動的auth_token
に使用を処理するために、Backbone.Model の上に BaseModel を作成する必要がある場合があります。auth_token
たとえば、APIauth_token
が QueryString の一部としてを渡すことを想定している場合、Backbone.Model.url()
関数をオーバーライドする必要があります。
var BaseModel = Backbone.Model.extend({
url: function() {
var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
if (this.isNew()) return base + '?' + $.cookie('auth_token');
return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id) + '?' + $.cookie('auth_token');
}
});
var EntityModel = BaseModel.extend({ ... });
したがって、Backbone.Model をオーバーライドする方法は、API エンドポイントが期待するものによって異なります。
これに従うことが最終的な目標である場合、できることがいくつかあります。
App.Models.Session = Backbone.Model.extend
defaults:
access_token: null,
user_id: null
initialize: ->
@load()
authenticated: ->
Boolean(@get("auth_token"))
login: (email, password, options)->
# make an AJAX call to the authentication API
# once returned, call @save(...) with auth_token that you got back.
# options is there to facilitate that, if you want to pass in an onAuthencated or onNotAuthenticated callbacks, you can.
# Saves session information to cookie
save: (auth_token)->
$.cookie('auth_token', auth_token)
# Loads session information from cookie
load: ->
@set
access_token: $.cookie('auth_token')
App.start = ->
@session = new App.Models.Session()
if @session.authenticated()
# redirect to user page
else
# launch a login form
# call @session.login(email, password)
option
補足として、 @login(email, password, options) でパラメーターを使用する代わりに@trigger('authenticated')
、モデルからのようにイベントをトリガーして、ユーザーが認証されたことをビュー/アプリに知らせることもできます。