2014-09-19 52 views
3

我正在将Play 2.2应用程序移植到Play 2.3应用程序(Scala)中。 为此,我将te安全社交版更改为支持Play 2.3的主SNAPSHOT。 但在编译时在我的播放控制台遇到错误。将Play 2.2应用程序移植到2.3.2版本(Scala)时出错

怎么了?

[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:33: ambiguous implicit values: 
[error] both method request2lang in trait Controller of type (implicit request: play.api.mvc.RequestHeader)play.api.i18n.Lang 
[error] and value lang of type play.api.i18n.Lang 
[error] match expected type play.api.i18n.Lang 
[error]  securesocial.views.html.Registration.signUp(form, token) 
[error]            ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:44: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  securesocial.views.html.Registration.startSignUp(form) 
[error]             ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:55: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  securesocial.views.html.Registration.startResetPassword(form) 
[error]               ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:66: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  securesocial.views.html.Registration.resetPasswordPage(form, token) 
[error]               ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:77: not found: type SecuredRequest 
[error] def getPasswordChangePage[A](implicit request: SecuredRequest[A], form: Form[ChangeInfo]): Html = { 
[error]            ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:78: Cannot find any HTTP Request Header here 
[error]  securesocial.views.html.passwordChange(form) 
[error]           ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:99: not found: type Identity 
[error] def getAlreadyRegisteredEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt], Option[Html]) = { 
[error]          ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:100: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  (None, Some(securesocial.views.html.mails.alreadyRegisteredEmail(user))) 
[error]                 ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:110: not found: type Identity 
[error] def getWelcomeEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt], Option[Html]) = { 
[error]       ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:111: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  (None, Some(securesocial.views.html.mails.welcomeEmail(user))) 
[error]               ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:122: too many arguments for method apply:()(implicit request: play.api.mvc.RequestHeader, implicit lang: play.api.i18n.Lang)play.twirl.api.HtmlFormat.Appendable in object unknownEmailNotice 
[error]  (None, Some(securesocial.views.html.mails.unknownEmailNotice(request))) 
[error]                ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:133: not found: type Identity 
[error] def getSendPasswordResetEmail(user: Identity, token: String)(implicit request: RequestHeader): (Option[Txt], Option[Html]) = { 
[error]          ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:134: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  (None, Some(securesocial.views.html.mails.passwordResetEmail(user, token))) 
[error]                ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:144: not found: type Identity 
[error] def getPasswordChangedNoticeEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt], Option[Html]) = { 
[error]           ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:145: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  (None, Some(securesocial.views.html.mails.passwordChangedNotice(user))) 
[error]                 ^
[error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:155: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] 
[error]  securesocial.views.html.notAuthorized() 
[error]          ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:4: object Token is not a member of package securesocial.core.providers 
[error] import securesocial.core.providers.Token 
[error]  ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:5: object IdentityId is not a member of package securesocial.core 
[error] import securesocial.core.IdentityId 
[error]  ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:25: not found: type Identity 
[error] passwordInfo: Option[PasswordInfo] = None) extends Identity { 
[error]             ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:16: not found: type IdentityId 
[error] identityId: IdentityId, 
[error]    ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:30: not found: type IdentityId 
[error] implicit val identityIdFormat = Json.format[IdentityId] 
[error]            ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:35: Unapply of object LoginUser has no parameters. Are you using an empty case class? 
[error] implicit val storageFormat = Json.format[LoginUser] 
[error]           ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:39: not found: type IdentityId 
[error] implicit val identityIdFormat = Json.format[IdentityId] 
[error]            ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:49: not found: type Identity 
[error] def apply(user: Identity): Option[LoginUser] = { 
[error]     ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:58: not found: type UserServicePlugin 
[error] class UserService(application: Application) extends UserServicePlugin(application) { 
[error]             ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:59: not found: type Token 
[error] private var tokens = Map[String, Token]() 
[error]         ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:69: not found: type Identity 
[error] def find(id: IdentityId): Option[Identity] = { 
[error]         ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:69: not found: type IdentityId 
[error] def find(id: IdentityId): Option[Identity] = { 
[error]    ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:72: No Json formatter found for type security.LoginUser. Try to implement an implicit Format for this type. 
[error]  val futureUser = UserServiceLogin.find(Json.obj("identityId" -> Json.toJson(id))).one 
[error]           ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:86: not found: type Identity 
[error] def findByEmailAndProvider(email: String, providerId: String): Option[Identity] = { 
[error]                  ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:88: No Json formatter found for type security.LoginUser. Try to implement an implicit Format for this type. 
[error]  val futureUser = UserServiceLogin.find(Json.obj("email" -> email)).one 
[error]           ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:97: not found: type Identity 
[error] def save(user: Identity): Identity = { 
[error]       ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:97: not found: type Identity 
[error] def save(user: Identity): Identity = { 
[error]    ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:117: not found: type Token 
[error] def save(token: Token) = { 
[error]     ^
[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:130: not found: type Token 
[error] def findToken(token: String): Option[Token] = { 
[error]          ^
[error] /Users/alberto/git/recommendation-system/conf/routes:41: value resetPassword is not a member of securesocial.controllers.Registration 
[error] GET  /reset/:token     @securesocial.controllers.Registration.resetPassword(token) 
[error] /Users/alberto/git/recommendation-system/conf/routes:36: value startResetPassword is not a member of securesocial.controllers.Registration 
[error] POST  /signup      @securesocial.controllers.Registration.startResetPassword 
[error] /Users/alberto/git/recommendation-system/conf/routes:42: value handleResetPassword is not a member of securesocial.controllers.Registration 
[error] POST  /reset/:token     @securesocial.controllers.Registration.handleResetPassword(token) 
[error] /Users/alberto/git/recommendation-system/conf/routes:49: value notAuthorized is not a member of securesocial.controllers.ProviderController 
[error] GET  /not-authorized    @securesocial.controllers.ProviderController.notAuthorized    
[error] /Users/alberto/git/recommendation-system/conf/routes:36: value startResetPassword is not a member of securesocial.controllers.Registration 
[error] POST  /signup      @securesocial.controllers.Registration.startResetPassword 
[error] /Users/alberto/git/recommendation-system/conf/routes:39: value startResetPassword is not a member of securesocial.controllers.Registration 
[error] GET  /reset      @securesocial.controllers.Registration.startResetPassword 
[error] /Users/alberto/git/recommendation-system/conf/routes:40: value startResetPassword is not a member of securesocial.controllers.Registration 
[error] POST  /reset      @securesocial.controllers.Registration.startResetPassword 
[error] /Users/alberto/git/recommendation-system/conf/routes:41: value resetPassword is not a member of securesocial.controllers.Registration 
[error] GET  /reset/:token     @securesocial.controllers.Registration.resetPassword(token) 
[error] /Users/alberto/git/recommendation-system/conf/routes:42: value handleResetPassword is not a member of securesocial.controllers.Registration 
[error] POST  /reset/:token     @securesocial.controllers.Registration.handleResetPassword(token) 
[error] /Users/alberto/git/recommendation-system/conf/routes:49: value notAuthorized is not a member of securesocial.controllers.ProviderController 
[error] GET  /not-authorized    @securesocial.controllers.ProviderController.notAuthorized    
[error] /Users/alberto/git/recommendation-system/app/views/secure/login.scala.html:5: object Registry is not a member of package securesocial.core 
[error] @import securesocial.core.AuthenticationMethod._ 
[error]       ^
[error] /Users/alberto/git/recommendation-system/app/views/secure/login.scala.html:35: not found: value Registry 
[error]   @defining(Registry.providers.all.values.filter(_.id != UsernamePassword)) { externalProviders => 
[error]     ^
[error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:4: object Registry is not a member of package securesocial.core 
[error] @import securesocial.core.IdentityProvider 
[error]       ^
[error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:8: object RoutesHelper is not a member of package securesocial.core.providers.utils 
[error] @import play.api.Logger 
[error] ^
[error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:12: not found: value Registry 
[error] @Registry.providers.get(providerId).map { provider => 
[error]^

感谢 阿尔贝托

回答

7

已经有一个巨大的重构中securesocial 2.1.4和主人之间。

整个插件系统有蜂被刮到有利于注入组件。 Identity和IdentityId特征已被删除,操作现在由您自己的类型进行参数化。

UserService API也发生了很大变化,从同步到异步。

该文档目前仍在使用中。您将不得不查看samples以了解这一切如何结合在一起。

@edit

关于视图模板: securesocial.controllers.ViewTemplates现在,你可以扩展到覆盖相应的视图的特质。那么您必须更改默认布线以引入您自己的视图提供程序。

,如果你看一下全球的样品其创建对象MyRuntimeEnvironment

object MyRuntimeEnvironment extends RuntimeEnvironment.Default[DemoUser] { 
    override lazy val routes = new CustomRoutesService() 
    override lazy val userService: InMemoryUserService = new InMemoryUserService() 
    override lazy val eventListeners = List(new MyEventListener()) 
    } 

,你可以创建自己的ViewTemplate并覆盖在这里:

object MyRuntimeEnvironment extends RuntimeEnvironment.Default[DemoUser] { 
    override lazy val routes = new CustomRoutesService() 
    override lazy val userService: InMemoryUserService = new InMemoryUserService() 
    override lazy val eventListeners = List(new MyEventListener()) 
    override lazy val viewTemplates = new ViewTemplates{ 

     override def getLoginPage(form: Form[(String, String)], msg: Option[String])(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getPasswordChangePage(form: Form[ChangeInfo])(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getNotAuthorizedPage(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getStartSignUpPage(form: Form[String])(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getSignUpPage(form: Form[RegistrationInfo], token: String)(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getResetPasswordPage(form: Form[(String, String)], token: String)(implicit request: RequestHeader, lang: Lang): Html = ??? 

     override def getStartResetPasswordPage(form: Form[String])(implicit request: RequestHeader, lang: Lang): Html = ??? 
    } 
    } 

当然,我并没有真正建议中正确的方法是创建

class CustomViewTemplates extends ViewTemplates{ 
//... 
} 

,则

override lazy val viewTemplates = new CustomViewTemplates() 

为ViewTemplates默认实现在securesocial.core.ViewTemplates.Default

可用于每一个“老”插件相同的机制(userService,认证店,IdGenerator,PasswordValidator,邮件模板等等)的实际列表实际上可以从securesocial.core.RuntimeEnvironment.Default

该设计已更改为允许编译和基于运行时的依赖项注入。它可能(不幸)不得不再次改变与播放2.4和播放3.0,这将使运行时DI成为框架的第一类公民(虽然仍支持编译时注入)

+0

我看到的示例在github存储库,但它doesn不帮助我,因为不使用ViewTemplates – 2014-09-19 12:05:31

+0

谢谢你的回答。 我的问题是在ViewTemplates特性的实现中,我没有看到github上的示例项目中的任何示例。 编译器给我错误隐式值找不到。 – 2014-09-19 13:05:14

+0

我已经为ViewTemplates的默认实现添加了一个链接...请参阅https:// github。com/jaliss/securesocial/blob/master/module-code/app/securesocial/controllers/ViewsPlugin.scala#L136 – Jean 2014-09-19 13:25:11