我主要来自 PHP 和 ASP.NET 背景。最近我涉足 Ruby 并开始与Padrino
. 不太像 Rails,也不太像 Sinatra。
我正在使用第一个严肃的应用程序Padrino
,很快就卡住了,感谢您的帮助。
我认为的问题在于Padrino Admin
. 我正在尝试让用户使用 Omniauth 登录我Facebook
的网站。
我一直在关注本教程:Padrino 和 Omniauth 概述。
该应用程序托管在Heroku
.
结果:Facebook
登录时,创建了一个帐户(在数据库中)。但是当我到达限制区域时,我会被重定向回登录页面。
这就是我所拥有的。
应用程序.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
。
我做错了什么吗?
提前致谢。非常感谢任何帮助。