1。 Systemcredentials:
使用: symfony 2.7, php 5.6, Apache 2作为Webserver
2。问题:
尝试实现facebook连接。用户可以登录登录页面,并且应该从后端登录。需要设置PHPSESSION Cookie。前端部分调用后端函数fbconnect。 fbconnect操作检查表单和facebook凭据是否有效。如果切换参数有效并连接到Facebook和我的应用程序,则操作 从symfony转发到magic登录方法。现在魔术登录功能应该登录用户,但操作似乎只是设置cookie。我现在还是个笨蛋。也许事件链在这一点上被打破了,因为前进到魔法登录动作?奇怪的行为是fbconnect动作被调用两次,但在前端部分,该方法被调用一次。我错过了一些特别的东西吗?
我的参数:facebook ID,facebook(有效)Accesstoken,facebook Email
第3。代码片段
我的 security.yml 文件:
security:
firewalls:
....
....
webapi:
provider: secureBundle
pattern: ^/webapi
anonymous: ~
form_login:
login_path: webapi-login
check_path: webapi-login-check
default_target_path: webapi-login-success
require_previous_session: false
注意:“webapi-”部分是动态添加到操作的路由(路由正常工作)
fbconnect行动:
注意:操作验证表单是否正确以及所有参数是否有效,这只是转发代码段。
$response = $this->forward(
'ApiBundle:Login:login',['/login/'], [
'_password' => $passwordEncoder->decodePassword($user->getPassword(), null),
'_username' => $user->getEmail(),
]
登录操作:
注意:引用来自symfony doc Login Symfony。 Action只是让symfony处理这个并且jetzt返回一个响应。
/**
* @Route(path="/login/",name="login")
*
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function loginAction(Request $request)
{
$frame = $this->createFrame();
$authenticationUtils = $this->get('security.authentication_utils');
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
if ($error) {
$frame->setError(true, Errno::GENERAL_BAD_CREDENTIALS, [$error->getMessage()]);
}
return $frame;
}
4。结论
就像我上面解释的那样,我认为symfony无法处理登录的转发。我不会解释为什么设置PHPSESSID Cookie,但我仍然是anon。你有这方面的经验吗?我很欣赏每一个提示。
问候暴力!
答案 0 :(得分:1)
我想出了这个解决方案:
@Override
public void onNewIntent(Intent intent) {
// Deal with new Intent over here...
}
我手动创建了登录信息。生成UsernamePasswordToken并分派事件。
希望它会帮助有同样问题的人!