我希望允许用户从复选框列表中选择作用域。我将表单设置如下:
<%= f.label :scopes, class: 'col-sm-2 control-label' %>
<% Doorkeeper.configuration.scopes.each do |scope| %>
<%= check_box_tag("doorkeeper_application[scopes][#{scope}]", scope, @application.scopes.include?(scope)) %>
<%= scope %><br>
<% end %>
<% end %>
它会产生
Oauth::ApplicationsController
接受doorkeeper_application[scopes]
。虽然用户应该能够选择多个作用域,但不接受像doorkeeper_application[scopes][foo]
这样的参数。
将这些参数传递给控制器的最佳实践是什么?或者在Doorkeeper中实现复选框作用域有更好的实践吗?
发布于 2018-05-21 21:51:11
根据OAuth2规范,多个作用域应该用空格字符连接。因此,您应该从params
获取选中作用域的名称,使用空格" "
将它们连接起来,并将该单个值指定为doorkeeper_application[scopes]
值。
发布于 2019-03-26 04:21:56
从5.1.0rc2版本开始,Doorkeeper支持通过自动将数组转换为空格分隔的作用域字符串来实现开箱即用。有关更多详细信息,请参阅https://github.com/doorkeeper-gem/doorkeeper/pull/1214。
对于5.1.0rc2以上的版本,您需要根据您自己或预处理用户输入参数来修补Scopes。
https://stackoverflow.com/questions/50450003
复制相似问题