如何在SecureSocial中禁用提供程序?

时间:2014-08-03 12:31:24

标签: playframework securesocial typesafe-activator

我正在使用Play Framework 2.3.2与Activator 1.2.3并正在尝试使用SecureSocial插件master-SNAPSHOT。

Documentation说以下内容:

  

SecureSocial采用模块化架构设计,使用插件。这个   意味着您可以轻松启用/禁用它们以仅包含您需要的内容   而且你可以为自己更改内置插件   如果需要自定义工作方式,则实现。

     

插件在conf目录下的play.plugins文件中定义。   如果您还没有创建该文件并添加:

     

[插件示例列表]

     

只有您在play.plugins文件中包含的身份验证提供程序才会显示在登录名中   页。

(强调补充。)

我现在正在尝试SecureSocial存储库中包含的Java Demo。 play.plugins文件只包含一行:

1500:com.typesafe.plugin.CommonsMailerPlugin

但如果我运行演示,所有提供商都可用: Running demo screenshot

如何关闭某些提供商?根据文档,我希望在play.plugins中注明一些行,但没有注释掉

这里发生了什么?

2 个答案:

答案 0 :(得分:7)

如果未在插件文件中配置提供程序,则必须使用master-SNAPSHOT而不是2.1.3 - 它不再使用Play插件。相反,现在有一个RuntimeEnvironment,您可以在其中配置模块可用的服务(包括您需要实现的UserService)。

默认环境包括所有提供程序,并且是演示使用的内容:https://github.com/jaliss/securesocial/blob/master/samples/java/demo/app/service/MyEnvironment.scala

master中有很多更改,文档还没有更新。要自定义可用的提供程序,您需要创建自己的环境类,扩展RuntimeEnvironment.Default并覆盖提供程序字段。例如:

class MyEnvironment extends RuntimeEnvironment.Default[DemoUser] {
    override val userService: UserService[DemoUser] = new MyUserService()
    override lazy val providers = ListMap(
         include(
            new FacebookProvider(routes, cacheService,oauth2ClientFor(FacebookProvider.Facebook))
         ),
         include(
            new FoursquareProvider(routes,cacheService,oauth2ClientFor(FoursquareProvider.Foursquare))
         ),
         include(
            new UsernamePasswordProvider[DemoUser](userService, avatarService, viewTemplates, passwordHashers)
         )
    )
}

MyUserService实施UserService的位置,DemoUser是您要用来代表操作中用户的类。

答案 1 :(得分:0)

我正在JAVA中实现我的解决方案。我想做同样的事情。以下是此解决方案的最终代码。我做了一个功能"过滤"并覆盖providers()方法。

  public class SocialSecureRuntimeEnvironment extends RuntimeEnvironment.Default<Nuser> {
  private BaseUserService<Nuser> userService = new NuserService();
  private ListMap<String, IdentityProvider> providers = null;

  @Override
  public BaseUserService<Nuser> userService() {
    return userService;
  }

  @Override
  public ListMap<String, IdentityProvider> providers() {
    if (providers != null) {
      return providers;
    }
    providers = filter(super.providers(), "userpass");
    return providers;
  }

  @SuppressWarnings("unchecked")
  private ListMap<String, IdentityProvider> filter(ListMap<String, IdentityProvider> current,
      String provider) {
    while (current.size() > 0 && !current.key().equals(provider)) {
      current = current.next();
    }

    if (current.size() > 1) {
      current = (ListMap<String, IdentityProvider>) current.drop(current.size() - 1);
    }
    return current;
  }
}

以下是我的登录屏幕之后的样子。

enter image description here