Rails 添加头像图片时 出现 RestClient::Unauthorized (401 Unauthorized):

leslin123 · 2014年03月17日 · 最后由 leslin123 回复于 2014年03月17日 · 4318 次阅读

环境:Ubuntu 的环境,用的是默认 root 的用户

问题:在提交含头像图片的个人资料更新时,是出现如下错误。代码实现是参考 ruby-china 的。 现象: (1)如果仅仅修改资料,不同时添加图片,提交更新是可以成功的。 (2)如果 add 头像就出现问题。 参考了一下历史帖子说有可能是外链的问题,但是用的是阿里云主机,没有开启或者禁止外链说法。 还是 gravatar 需要申请账号或者配置什么东西?

Processing by AccountController#update as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"les", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x000000076f89a0 @tempfile=#<Tempfile:/tmp/RackMultipart20140317-1459-1f99a9g>, @original_filename="caulin.jpg",, ........., "tagline"=>"Make your life a story worth telling", "bio"=>"目前}, "commit"=>"更新资料"}
Completed 500 Internal Server Error in 2036ms

RestClient::Unauthorized (401 Unauthorized):
  app/models/user.rb:211:in `update_with_password'
  app/controllers/account_controller.rb:10:in `update

各位高手帮忙解释一下,给点思路,谢谢!

补充用一下关联代码:account_controller.rb:10

 1 # coding: utf-8
 2 class AccountController < Devise::RegistrationsController..
 3   def edit
 4     @user = current_user
 5     # 首次生成用户 Token
 6     @user.update_private_token if @user.private_token.blank?
 7   end
 8 
 9   def update
10     super
11   end

会不会是 params={}的问题?

205   def update_with_password(params={})
206     if !params[:current_password].blank? or !params[:password].blank? or !params[:password_confirmation].blank?
207       super
208     else
209       params.delete(:current_password)
210       self.update_without_password(params)
211     end
212   end

明显是鉴权失败,你打印出 current_user 看看是不是 null

devise 的权限吗?这里是用户自己修改自己的资料,权限应该没有问题。而且从现象上看,如果不添加图片,仅仅更改用户名等资料是不会失败的,所以用户和密码应该是没有问题的,是吗?

@Rei 能帮忙看看什么原因,或者提示一下解决方法吗?谢谢

#3 楼 @leslin123 没有代码,我也不懂。先搞清楚哪里调用了 RestClient。

@Rei ,谢谢,我补充了一下代码,有看到一个类似的,说是如下解决。这个没有看明白,怎么加到代码里呢?

401 Unauthorized 问题解决,就是要加入 csrf token params!

params: {
                authenticity_token: "#{form_authenticity_token.to_s}"
             }

RestClient 是用来向外发送 http 请求的,你代码的头像放在哪里?Ruby China 用的 upyun,直接使用 ruby china 代码意味着要注册 upyun 服务并且在配置里加上 upyun 的 key。

@Rei ,头像不是放在 gravatar 了吗?我理解是 gravatar 可以免费使用,所以 upyun 被我注释掉了,也没有注册相关的账户和密码。难道和这个相关?

查看了一下网页源代码,发现默认的头像地址,还是指向:http://*****-dev.b0.upaiyun.com/user/big_avatar/1.jpg Failed to load resource: net::ERR_CONNECTION_REFUSED 应该是这个问题了,我考虑一下,怎么搞才好,能不用 upyun,直接连接 gravatar 吗? 不管如何,有点思路了,非常感谢@Rei

在 ruby china,gavatar 是默认头像,如果上传头像则传到 upyun。如果想参考一个功能类似但依赖更少的项目,可以看 http://ruby-china.org/topics/17706

真的非常感谢你。 Campo 3 我已经 fork 了一份,后续打算好好学习这个,ActiveRecord 搭配 Postgresql 数据库的配置是多数人学习时非常需要的,赞!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号