我正在使用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
但如果我运行演示,所有提供商都可用:
如何关闭某些提供商?根据文档,我希望在play.plugins
,中注明一些行,但没有注释掉。
这里发生了什么?
答案 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;
}
}
以下是我的登录屏幕之后的样子。