接口play.api.Plugin不能从类services.InMemoryUserService分配

时间:2015-12-01 14:10:28

标签: scala playframework-2.0 guice securesocial

我正在尝试使用play 2.4.4(与2.4.2相同)和SecureSocial实施OAUTH2身份验证,我的Scala版本为2.11.7

我正在使用SecureSocial上的Githhub示例关注SecureSocial demo上的教程

我首先在文件play.plugins中没有任何内容,我尝试使用以下某个方式登录

http://localhost:9000/api/custom/login

我最终得到以下错误:

[RuntimeException: [securesocial] Missing properties for provider 'facebook'. Verify your configuration file is properly set.]

好的,2个问题,1个没有登录,2即使有登录我对Facebook也不感兴趣,只有google。

在SecureSocial网站上进行配置后,有一个文件play.plugin,您需要在该文件中找到所需的提供程序以及用于处理身份验证的用户服务(用户服务可以在github示例中找到)

我的play.plugins看起来像这样:

9998:services.InMemoryUserService
10002:securesocial.core.providers.GoogleProvider

现在当我再次尝试相同的网址时,我收到以下错误:

java.lang.ClassCastException: interface play.api.Plugin is not assignable from class services.InMemoryUserService
 play.utils.Reflect$.getClass(Reflect.scala:145)
 play.api.Plugins$$anonfun$loadPlugins$1.apply(Plugins.scala:88)
 play.api.Plugins$$anonfun$loadPlugins$1.apply(Plugins.scala:87)
 scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
 scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
 scala.collection.immutable.List.foreach(List.scala:381)
 scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
 scala.collection.immutable.List.map(List.scala:285)
 play.api.Plugins$.loadPlugins(Plugins.scala:87)
 play.api.Plugins$$anonfun$apply$4.apply(Plugins.scala:100)
 ...

什么!吗

好的,现在我尝试使用其他身份验证网址:

http://localhost:9000/auth/authenticate/google

我得到了同样的错误,如果我远程播放play.plugins我得到一个Guice异常,我不知道如何解决。

由于

1 个答案:

答案 0 :(得分:1)

在线文档适用于旧版本(尚未更新)。

模块中不再使用插件。您现在拥有的是一个RuntimeEnvironment类,可用于配置要使用的服务。还有一个RuntimeEnvironment.Default类,您可以将其用作基础,这是演示在此处使用的内容:https://github.com/jaliss/securesocial/blob/3.0-M4/samples/scala/demo/app/Global.scala#L27

在您的情况下,您只会包含Google提供商,因此基本上将提供商覆盖为:

override lazy val providers = ListMap(
     include(
        new GoogleProvider(routes,cacheService,oauth2ClientFor(GoogleProvider.Google)))
     )

您需要在Google控制台中创建应用以获取您的oauth密钥。您需要在securesocial.conf中设置这些密钥(查找google部分)。请务必确保在Google控制台中为您的应用启用Google+ API,否则由于缺少权限,登录将无法使用。

一旦定义了环境,就需要创建一个模块来绑定它。示例在此处执行:https://github.com/jaliss/securesocial/blob/3.0-M4/samples/scala/demo/app/DemoModule.scala#L6

最后,告诉Play在application.conf中使用您的模块:https://github.com/jaliss/securesocial/blob/3.0-M4/samples/scala/demo/conf/application.conf#L13