warden 也用了 throw 和 catch.
你可以在 rack 的 warden middleware 上层直接丢个 :warden 出来,然后 warden 就帮你返回 401 了
https://github.com/hassox/warden/wiki/Overview#failing-authentication
写了一个帖子讨论这个安装问题:rbenv system wide install (support for multi-user usecase)
这是什么东东...
我感觉这是需求问题,Gerrit 目的是强制性的,精细化的 code review 吧?这方面 gitlab 还做不了呢。
ok 基本搞定,Rbenv 系统级的安装,也解决了权限问题,使用了组权限。把需要完全控制 rbenv 的用户加入 rbenv 组就可以了
GIST: https://gist.github.com/crhan/8064624#file-rbenv-install-system-wide-sh
RBENV_PREFIX="/usr/local/rbenv"
RBENV_GROUP="rbenv"
## Install rbenv
git clone git://github.com/sstephenson/rbenv.git $RBENV_PREFIX
## Add rbenv to the path:
echo '# rbenv setup' > /etc/profile.d/rbenv.sh
echo "export RBENV_ROOT=${RBENV_PREFIX}" >> /etc/profile.d/rbenv.sh
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
chmod +x /etc/profile.d/rbenv.sh
source /etc/profile.d/rbenv.sh
## set rbenv group property
groupadd $RBENV_GROUP
chown -R :rbenv $RBENV_PREFIX
sudo find $RBENV_PREFIX -type f -perm /100 -exec chmod g+x {} \;
sudo find $RBENV_PREFIX -type f -perm /200 -exec chmod g+w {} \;
sudo find $RBENV_PREFIX -type d -exec chmod g+rwxXs {} \;
## Install ruby-build:
pushd /tmp
git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build
./install.sh
popd
## Install Ruby 1.9.2-p290:
#rbenv install 1.9.3-p484
#rbenv global 1.9.3-p484
## Rehash:
#rbenv rehash
HTTP CODE 403: RFC2616
10.4.4 403 Forbidden The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.
我没用过 omniauth-github, 但是你应该是填错字段了。403 说明通过了 authentication, 但是没通过 authorization
我是从 rbenv 换到了 rvm.
原因是自己用 rbenv 编出来的老是不能在 irb 里面输入中文,虽然知道其根本原因是使用了错误的 readline 库,但是一直都处理不好,一怒之下就换了 rvm.
另外 rvm 良好的处理了多用户服务器环境下的管理。比如我用 root 安装 rvm 和 ruby, 但是用另一个普通用户运行 app 这种场景,rvm 能帮你搞定。而 rbenv 则需要你有一定的 SA 能力才能处理好。
真正让我选择 rvm 的原因是:
再求教一下,列出的理由 2 和 3, 我其实没看懂。
RocketPants 很好用,赞!
就是文档不太全,得看源码才明白怎么用
嗯...我 Rfind 和 Redit 也不能用,别的都好的。
果断支持主席!
#11 楼 @jarorwar 额...我是因为最近是在选....还没想好用哪个。关于 cancan 不给的文章在 这里
When upgrading an internal application to Rails 4, I discovered that CanCan does not play well with strong parameters. There are some patches to make things work, but they didn’t feel right. Also, CanCan hasn’t been given much love recently; it has the signs of an abandoned project: sporadic commits, many open issues/pull-requests, poor Code Climate score, etc.
有听说 cancan 逐渐失去维护,而且对 rails 4 支持并不好诶。
pundit
有人试过这个么..
#10 楼 @zhangyuan 为啥觉得方向不对.? 你们直接给 real_ip_header 设置的是 REMOTE_ADDR 这个头.?
Rails 和 Rack 都没有去取 X-Real-IP 头的代码。
而且你如果就设置的是 REMOTE_ADDR 的话,会不会只支持一层代理转发?前端再加上一个 LB 会咋样..?
楼主得描述一下你是怎么启动的 rails app
好吧..今天碰到跟楼主一样的问题。
参考下 rails #5523
config.action_dispatch.trusted_proxies
Rack::Request#trusted_proxy?(ip)
打 monkey patch#45 楼 @jimrokliu 不太理解.......不止一个是啥意思..
讨教一下...开发 API 之后,认证咋整。
可供参考的例子不多
DATE
& Content-MD5
& APIAuth
), 感觉有点非主流。这样实现的问题是文档不好写,毕竟是给别人用的 API 的文档。@fredwu activeResource 好像不能自定义 API 签名啊.? 看起来只支持 Basic Auth 和 Digest. 但是我需要自定义签名,以防止 replay attack. 没找到怎么实现..
简化一下应该是这样.....
class ApplicationController
def authenticate!
unless current_user
session[:back_url] = request.uri
redirect_to user_sessions_url
end
end
end
class UserSessionsController
def new; end
def create
redirect_to(session.delete(:back_url) || root_url)
end
end
已到会场 - -...
#13 楼 @ZombieCoder 嗯..不过内网的网络确实是个问题...有些机房就是不给外网的...
#11 楼 @ZombieCoder - - errr...不是通过 bundle package 命令生成的嘛..?