routes.rbでSorceryの承認もやっていく。
rssフィードみてたらSorcery使う記事があったので。
例によってconstraints
Person
というSorcery用のモデルがあるとして、current_user
取得処理内のlogin_from_session
の成功を以て承認とします。
class Constraint::PersonConfig
def matches?(request)
!!Person.sorcery_adapter.find_by_id(request.session[:user_id])
end
end
scope :person_configs, module: :users, constraints: Constraint::PersonConfig.new do
get 'index', to: 'configs#index'
get 'password', to: 'passwords#edit'
put 'password', to: 'passwords#update'
end
get 'person_configs/*path', to: ->(env) { [403, {'Content-Type' => 'text/plain'}, ['forbidden']] }
はじめて試したけど簡単っぽい
最小限だとこれだけだし
t.string :email, :null => false
t.string :crypted_password
t.string :salt
コントローラーにlogin
とlogout
というメソッドが用意されるのでそれ使えば簡単にインアウトできる。
いわゆるcurrent_user
の取得はPerson
だろうがBlogger
だろうがcurrent_user
一択。
一般的なメソッド名とかを容赦なく定義していってて大胆っぽい。
request_specでSorceryアカウントにサインインするには
コントローラーとフィーチャーでは
RSpec.configure do |config|
config.include Sorcery::TestHelpers::Rails::Controller, type: :controller
config.include Sorcery::TestHelpers::Rails::Integration, type: :feature
end
@person = Person.create!(email: 'a@a.com', password: 'aaa', password_confirmation: 'aaa')
login_user(@person)
でいけるっぽいんですがリクエストではダメだったので例によって普通にこれ。
before :each do
@person = Person.create!(email: 'a@a.com', password: 'aaa', password_confirmation: 'aaa')
post '/person_sessions', email: 'a@a.com', password: 'aaa'
end