加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails在登录后设计重定向

发布时间:2020-12-17 02:33:05 所属栏目:百科 来源:网络整理
导读:我正在使用Devise with Rails来登录我的用户.这一切都很好,但是,我无法获得特定的重定向工作. 我是rails的新手,所以我做事的方法可能不正确. 基本上,举个例子,我允许用户喜欢帖子.但是,他们需要登录才能这样做.我在我的控制器中创建了一个名为’like’的动作
我正在使用Devise with Rails来登录我的用户.这一切都很好,但是,我无法获得特定的重定向工作.

我是rails的新手,所以我做事的方法可能不正确.

基本上,举个例子,我允许用户喜欢帖子.但是,他们需要登录才能这样做.我在我的控制器中创建了一个名为’like’的动作,控制器有一个设计过滤器

before_filter :authenticate_user!,:except => [:index,:show]

因此输入了登录页面.一旦用户登录,我想将他们重新定向回他们所喜欢的帖子,并且已经调用了“喜欢”的动作.

我的控制器看起来像

def like

  @post = Post.find(params[:id]) 
  @like = Like.new;
  @like.user_id = current_user.id;
  @like.post_id = params[:id];
  respond_to do |format|
    if @like.save
      format.html { redirect_to @post,notice: 'You have like this post' }
      format.json { head :no_content }
    else 
      format.html { redirect_to @post,notice: 'Sorry you like was not saved  } 
      format.json { render json: @post.errors,status: :unprocessable_entity }
    end
  end  
end

当然,我无法使用after_sign_in_path_for对路径进行硬编码

def after_sign_in_path_for(resource)    
  #path to somewhere
end

但我已经读过,我可以使用会话变量,并可能在上面的代码中调用它.在Rails的哪一部分我可以编写会话变量,因为它在控制器动作中太迟了(因为设计在它执行类似动作之前接管)并且我无法看到如何在视图中设置它.

我的链接看起来像

<%= link_to "Like",{:controller => :posts,:action => :like,:id => @post.id},{:method => :post } %> |

PS使用创建新“帖子”时的重定向工作正常,即用户登录并重定向到新的帖子视图.

任何帮助和提示将不胜感激.

谢谢

解决方法

您遇到了这种情况,因为类似的操作是专为POST设计的.因此,在POST到该URL之前,应确保用户已登录,并且使用会话执行此操作非常棘手:

>你必须通过从before_filter中排除它来取消保护类似方法
>然后手动检查user_signed_in? (请注意,这是一个辅助方法),
>然后(如果用户未登录),在会话中存储您喜欢的内容并使用返回URL重定向到登录页面
>当用户访问此返回URL(它将是GET而不是POST)时,您将不得不查找会话信息并执行原始的Like应该执行的操作(但是当时用户将登录).

看到所有这些舞蹈都以GET请求结束,为什么不首先让Like动作处理GET请求以及在查询字符串中传递参数?这将需要0代码更改,它不会让您暴露于安全威胁,因为Like受before_filter保护.您只需要在< a>上使用rel=”nofollow”确保搜索引擎不会关注您的“赞”链接.标签.

有关相关讨论,请参阅redirect_to using POST in rails.其中一个建议是通过JavaScript在客户端上构建和提交表单.一旦用户进行了身份验证,就必须在该返回URL视图上进行此操作.如果你反对将你喜欢的行为暴露为GET(违反REST原则),这可能是最好的妥协

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读