私は主に PHP と ASP.NET のバックグラウンドを持っています。最近、私は Ruby に関わり、 と興味深い関係を築き始めていPadrino
ます。Railsに似すぎず、Sinatraに似すぎません。
私は最初の本格的なアプリケーションを作成しPadrino
ていますが、行き詰まるのにそれほど時間はかかりませんでした。助けていただければ幸いです。
私が信じている問題はPadrino Admin
. OmniauthFacebook
を使用して、ユーザーが自分の Web サイトにログインできるようにしようとしています。
私はこのチュートリアルに従っています: Padrino and Omniauth Overview。
アプリケーションは でホストされていHeroku
ます。
結果:Facebook
ログイン時に、アカウントが作成されます (データベース内)。しかし、制限区域に到達すると、ログイン ページにリダイレクトされます。
これが私が持っているものです。
app.rb
module PDeen
class App < Padrino::Application
register Padrino::Admin::AccessControl
register SassInitializer
register Padrino::Rendering
register Padrino::Mailer
register Padrino::Helpers
enable :sessions
# get '/' do
# "Welcome to me @ internet"
# end
use OmniAuth::Builder do
provider :facebook, 'xxxx', 'yyyy'
# provider :facebook, 'app_id', 'app_secret'
end
set :login_page, "/login" # determines the url login occurs
access_control.roles_for :any do |role|
role.protect "/profile"
role.protect "/admin" # here a demo path
end
# now we add a role for users
access_control.roles_for :users do |role|
role.allow "/profile"
end
get :index do
'Hi'
end
get :login do
slim :'index'
end
get :profile do
content_type :text
current_account.to_yaml
end
get :destroy do
set_current_account(nil)
redirect url(:index)
end
get :auth, :map => '/auth/:provider/callback' do
auth = request.env["omniauth.auth"]
# account = Account.find_by_provider_and_uid(auth["provider"], auth["uid"]) ||
# Account.create_with_omniauth(auth)
#
account = User.first( :provider => auth["provider"], :uid => auth["uid"] )
if ! account.nil?
set_current_account(account)
redirect :existing
end
if account.nil?
# Create account
account = User.new
account.uid = auth['uid']
account.name = auth['name']
account.provider = auth['provider']
account.email = auth['user_info']['email'] if auth['user_info']
account.role = 'users'
account.save
end
set_current_account(account)
#redirect "http://" + request.env["HTTP_HOST"] + url(:profile)
redirect :new
end
get :existing do
'existing'
end
get '/session/test' do
session[:test] = 'This is a test'
end
get '/session/print' do
"You saved: #{session[:test]}"
end
end
end
ユーザー.rb
class User
include DataMapper::Resource
# property <name>, <type>
property :id, Serial
property :name, String
property :email, String
property :role, String
property :uid, String
property :provider, String
end
どうなる >>
- リスト項目
- ~
[server]/profile
>にリダイレクトします[server]/login
- Facebook をクリックします ~> アプリを受け入れるページに移動します ~> アプリにリダイレクトします
- ~
[server]/profile
>にリダイレクトします[server]/login
セッションが機能していないと思いました。私が最初の PHP アプリに取り組んでいたとき、同様のセッション ベースの問題がありました。しかし、それが機能することが判明しました。そこで登場したのが[server]/session/test
and[server]/session/print
です。
にログインしてPadriono console
使用Heroku
するUser.all
と、エントリが表示されます。
また、ユーザーが認証されることもわかります。`である必要がある何か
Padrino admin
Accounts
モーダルを確認しました。id
重要なパラメータはとだと思いますrole
。
私は何か間違ったことをした?
前もって感謝します。どんな助けでも大歓迎です。