我正在尝试使路由私有,情况是这样的:如果用户想去'galleries/:id'它将重定向到gallery/login?id=:id和在那个PIN上,我做了一个登录表单到该画廊与所需的gallery_login_path
route.rb:
resources :galleries
get 'gallery/login', to: 'galleries#login', as: 'gallery_login'
post 'gallery/auth', to: 'galleries#auth', as: 'gallery_auth'
//
gallery GET /galleries/:id
gallery_login GET /gallery/login
gallery_auth POST /gallery/auth表单将触发URL:gallery_auth_path,方法us如下:
def auth
@error_login
@gallery = Gallery.find_by(id: params[:gallery_id])
if @gallery.pin.nil?
redirect_to "galleries/#{@gallery.id}"
elsif @gallery.pin == params[:pin] && @gallery.expired_pin.past?
@error_login = 'PIN expired'
elsif @gallery.pin == params[:pin] && !@gallery.expired_pin.past?
redirect_to "/galleries/#{@gallery.id}"
true
else
@error_login = 'PIN not match'
end
@error_login = 'Required PIN' unless params[:pin].present?
if @error_login.present?
respond_to do |format|
@error_login
format.js {render 'galleries/error_login' , layout: false}
end
end
end在login.html.haml上:
= form_with url: gallery_auth_path do |f|
= hidden_field_tag :gallery_id, "#{params[:id]}"
.form-group.row
= f.label :pin, class: 'col-sm-2 col-form-label text-center'
.col-sm-4.col-md-4.col-xs-4
= f.text_field :pin, class: 'form-control', placeholder: 'PIN'
.form-group
.col-sm-4
= f.submit 'Login', data: {disable_with: 'Loading...'}, class: 'btn btn-primary '当用户输入错误的个人识别码时,login.html上的错误信息工作正常,但当个人识别码正确时,它不能触发到'galleries/:id‘
在我的galleries_controller中:
before_action :authenticate, only: [:show]
def login
end
def auth
// method on above
end
private
def authenticate
redirect_to "/gallery/login?id=#{params[:id]}"
end在这种情况下使用before_action是错误的吗?有没有办法纠正这一点?因为在画廊登录表单上,用户输入正确的pin后,它不能触发到'galleries/:id‘,因为如果before_action我打赌,
发布于 2020-05-09 17:30:53
在控制器方法中使用params[:gallery][:pin]更改params[:pin]
routes.rb
get 'gallery/login', to: 'galleries#login', as: 'gallery_login'
post 'gallery/auth', to: 'galleries#auth', as: 'gallery_auth'
resources :galleries 发布于 2020-05-09 23:26:33
问题是有点难understand...you想要使用多个before_actions?要做到这一点,只需添加更多规则。
before_action :authenticate, only: [:show]
before_action :is_admin?, only: [:create]此外,你的帖子上的第一条评论说你没有动作show。在哪里,您的身份验证将只在该操作之前被调用。
https://stackoverflow.com/questions/61694333
复制相似问题