首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接口play.api.Plugin不能从类services.InMemoryUserService分配。

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

Stack Overflow用户
提问于 2015-12-01 14:10:27
回答 1查看 162关注 0票数 0

我试图用OAUTH2 (与2.4.2相同)和SecureSocial来实现play 2.4.4身份验证,我的Scala版本是2.11.7

我在SecureSocial上学习了SecureSocial演示的Githhub示例。

我首先在文件play.plugins中没有任何内容,然后尝试使用以下内容之一登录

代码语言:javascript
运行
复制
http://localhost:9000/api/custom/login

最后会出现以下错误:

代码语言:javascript
运行
复制
[RuntimeException: [securesocial] Missing properties for provider 'facebook'. Verify your configuration file is properly set.]

好,两个问题,一个没有登录,2,即使有一个登录我不感兴趣的facebook,只有谷歌。

在SecureSocial网站上的配置之后,有一个文件play.plugin,您需要在其中寻址您想要的提供者和处理身份验证的用户服务(用户服务可以在github示例中找到)

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

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

现在,当我再次尝试相同的URL时,会得到以下错误:

接口(接口):不能从类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(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) .

什么!?

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

代码语言:javascript
运行
复制
http://localhost:9000/auth/authenticate/google

我得到同样的错误,如果我远程play.plugins,我得到一个Guice异常,我不知道如何修复。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-12-01 19:19:23

在线文档是针对旧版本的(它们还没有更新)。

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

在您的示例中,您将只包含Google提供程序,因此基本上覆盖提供者如下:

代码语言:javascript
运行
复制
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中使用您的模块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34022468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档