小编Shy*_*ada的帖子

同时"添加到Slack"和"使用Slack登录"

我正在开发一个Slack应用程序,该应用程序也链接到一个Web应用程序,用户可以使用Slack登录.这是很常见的一个新用户既需要登录到Web应用程序,并添加该应用懈怠.

我想通过OAuth一次性让他们这样做.由于Web应用程序需要每个用户的姓名,电子邮件地址和个人资料图片,因此我将"identity.basic","identity.email"等范围添加到"Add to Slack"按钮请求的范围内.但事实证明,Slack不允许这样做.Slack OAuth页面显示" 请求的权限无效:无法同时请求身份范围和其他范围".

一种替代方案可能是请求用户:read和users:read.email范围而不是标识范围.但是,这为我们的应用提供了超出其需求的访问权 它只需要当前用户的信息,而不是团队中的所有用户.(它可能稍后需要所有用户的信息,所以无论如何我都在考虑这样做,但我不确定用户是否会喜欢它.)

另一种选择似乎是让用户通过两个不同的OAuth权限屏幕.但这似乎很麻烦,而且用户体验也不好.

所以问题是(1)是否有更好的方法,以及(2)为什么Slack不允许将身份范围与其他范围相结合?

更新以澄清,以回应@ erik-kalkoken的回答:

我知道"Add to Slack"和"Sign with with Slack"之间的区别.我当然不打算取消大多数用户做一个简单的"用Slack登录"的选项.但是,对于这个特定的应用程序,没有登录到Web应用程序就做"添加到Slack"是没有意义的.这需要由每个Slack团队的一个人完成,然后该团队的其他用户才能使用它.我们对新团队的入职流程有点麻烦,我正在寻找方法让它变得更简单,更顺畅.由于登录和添加步骤理论上可以合并为一个步骤,我宁愿这样做.

部分原因可能是因为我们没有开发"Slack app"; 我们正在为Web应用程序开发Slack集成.Web应用程序可以在不使用Slack的情况下使用,并且具有自己的用户和社区概念.

oauth slack-api slack

12
推荐指数
1
解决办法
1538
查看次数

Restangular - 嵌套资源

使用restangular处理嵌套资源时的最佳做法是什么?即

Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
    project.proofs = proofs;
    _.each(proofs, function(proof){
        proof.comments = proof.getList("comments");
    });
});
$scope.project = project;
Run Code Online (Sandbox Code Playgroud)

});

这将允许我很好地访问视图内的每个.

<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>
Run Code Online (Sandbox Code Playgroud)

如果我想要对项目进行更新,那么它会将所有内容发送到项目REST端点(包括所有校样和所有proofs.comments).

project.name = 'New Name!';
project.put();
Run Code Online (Sandbox Code Playgroud)

这让我觉得我必须实施一些错误的东西,并且冥想是一种更好的处理方法吗?

没有用这样的东西直接定义所有的$ scope(未经测试)?即

Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
    $scope.projectProofs = proofs;
    _.each(proofs, function(proof){  
      $scope.proofComments[proof.id].push(proof.getList("comments"));
    });
});
$scope.project = project;
Run Code Online (Sandbox Code Playgroud)

});

建议的最佳做法是什么?

rest angularjs restangular

8
推荐指数
1
解决办法
1375
查看次数

您使用什么策略来获取和缓存分页集合,特别是在角度或重绘中?

假设一个应用程序使用暴露分页集合的REST api中的数据,并且集合中的项目数量可能无限大(即,一次获取所有项目并存储在浏览器会话中的项目太多).

什么是获取,缓存和使这些数据的缓存无效的好策略?

说,API就像,

GET /users?page=1&per_page=50
Run Code Online (Sandbox Code Playgroud)

使用如下响应(即包括收集数据+分页元数据)

{
  "paging": {
    "per_page": 20,
    "page": 1,
    "previous": null,
    "self": "/api/v1/users?per_page=20&page=1",
    "next": "/api/v1/users?per_page=20&page=2"
  },
  "data": [
    // first 20 users
  ]
}
Run Code Online (Sandbox Code Playgroud)

客户端可能会也可能不会在连续页面中加载集合,一次一页.任何客户端都可以更改集合中的用户.最终的一致性就足够了,我现在并不关心写冲突.

问题是在angularjs应用程序的上下文中,但是是一般的场景.

api rest caching angularjs restangular

5
推荐指数
1
解决办法
962
查看次数

从本地预加载(JST)模板缓存加载ng-include部分

我将我的模板预先加载到一个javascript字符串数组中,就像var t = JST['firstTemplate']在哪里t一样,

<div>This scope has a value of {{value}}</div>
Run Code Online (Sandbox Code Playgroud)

如何在ng-include指令中使用此预加载的模板?

请注意,此场景中的模板可能更复杂,可能具有嵌套视图和模板以及它们自己的嵌套作用域和控制器.所以我不确定任何ng-bind指令是否有帮助?

更新:

查看ng-include它的来源似乎是一种很好的方法,可以将模板加载逻辑解耦为可自定义的提供程序.

当前的默认加载机制只是做了$http.get$templateCache作为缓存提供者.看起来我可以将模板内容注入JST['firstTemplate']到模板缓存中,但是我必须在启动时为每个模板执行此操作.

$templateCache.put('firstTemplate', JST['firstTemplate']);
Run Code Online (Sandbox Code Playgroud)

然后有,

<div ng-include="firstTemplate"></div>
Run Code Online (Sandbox Code Playgroud)

我还可以编写一个与每个ng-include并排的自定义指令,它以某种方式预先缓存模板.这再次显得笨重.

更新#2

我将尝试重写templateCache,以便它使用我已经预先加载的JST哈希.如果有效,将发布结果.

jst angularjs angularjs-ng-include angular-template

4
推荐指数
1
解决办法
4615
查看次数

带有 current_user 的 Rails 服务对象

我正在使用 devise 并创建了一个服务对象 - 一切都按预期完美运行。但是我想知道如何包含 current_user?因为我必须始终传递 current_user 或 user_signed_in 的那一刻?当我在不同的类和视图中使用相同的方法时,变量会很烦人,我该如何去做呢?

目前我有这个用于测试:

class User
    class GetStart
        attr_reader :current_user

        def initialize(user)
            @current_user = user
            p current_user
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise

4
推荐指数
1
解决办法
2730
查看次数