2015-07-28 113 views
0

爲什麼在我的調試面板中看到「您沒有通過身份驗證」。這個我有printscreen這個我想printscreen 我使用symfony_book,如果我有家裏的所有工作正常,但:Symfony安全驗證

在我的變種,用戶在其他網站進行身份驗證和我的網站我有用戶數據的GET方法 - EMAIL ,密鑰和參考

http://aog.local/app_dev.php/auth/[email protected]/962cc9a06924034d1285e8d75b2faf‌​2d/00223311121 

怎麼有這個我可以做認證,我如何驗證出現全局變量用戶printscreen ????

我創建auth服務有點這項服務無法驗證

我使用Symfony的2.6,並有實體開發者和用戶擴展的suser - >的suser實現的UserInterface thgis是路由面向auth:

#Enter routing 
artel_profile_auth: 
path:  /auth/{email}/{secretKey}/{referenceId} 
defaults: { _controller: ArtelProfileBundle:DeveloperProfile:auth } 

login_route: 
path:  /login 
defaults: { _controller: ArtelProfileBundle:Security:login } 

login_check: 
path: /login_check 
defaults: { _controller: ArtelProfileBundle:Security:securityCheck } 

index: 
pattern: /
defaults: { _controller: ArtelProfileBundle:Security:index } 

和行動:

public function authAction($email, $secretKey, $referenceId) 
{ 
    $authenticator = $this->get('artel.profile.authenticator'); 
    try { 
     $authDeveloper = $authenticator->auth($email, $secretKey, $referenceId); 

     return $this->redirect($this->generateUrl('artel_profile_homepage', array('username' => $authDeveloper->getUsername())) .'#personal-information'); 
    } catch (\Exception $error) { 

     return new Response($error->getCode() . ': '.$error->getMessage()); 
    } 
} 

和artel.profile.authenticator:

<?php 
namespace Artel\ProfileBundle\Helper; 

class Authenticator 
{ 
const SESSION_NAME = 'developer_auth'; 

private $session; 
private $secretAppKey; 
private $developerRepository; 
private $codeuserreferenceRepository; 

public function __construct($session, $secretAppKey, $developerRepository, $codeuserreferenceRepository) 
{ 
    $this->session = $session; 
    $this->secretAppKey = $secretAppKey; 
    $this->developerRepository = $developerRepository; 
    $this->codeuserreferenceRepository = $codeuserreferenceRepository; 
} 

public function auth($email, $secretKey, $referenceId) 
{ 
    $this->validateSecretAppKey($secretKey, $referenceId); 
//todo: We need to match $referenceId with email in validateDeveloper 
    $developer = $this->validateDeveloper($referenceId); 
    $this->setSession($developer); 

    return $developer; 
} 

public function authAdmin($email, $secretKey, $referenceId) 
{ 
    $this->validateSecretAppKey($secretKey, $referenceId); 
    //todo: We need to match $referenceId with email in validateDeveloper 
    $developer = $this->validateAdminDeveloper($referenceId); 
    $this->setSession($developer); 

    return $developer; 
} 

public function check($developer) 
{ 
    $result = false; 

    $session = $this->session->get(self::SESSION_NAME); 
    if ($session && $session == $developer->getId()) { 
     $result = true; 
    } 

    return $result; 
} 

public function logout() 
{ 
    $this->session->remove(self::SESSION_NAME); 
} 

protected function validateDeveloper($referenceId) 
{ 
    $code_user_reference = $this->codeuserreferenceRepository->findOneByCodereference($referenceId); 
    $id = $code_user_reference->getDeveloper()->getId(); 

    $developer = $this->developerRepository->findOneById($id); 


    if (! $developer) { 
     $this->exception('developer not found', 100); 
    } 

    return $developer; 
} 

protected function validateAdminDeveloper($referenceId) 
{ 
    $code_user_reference = $this->codeuserreferenceRepository->findOneByCodereference($referenceId); 

    $id = $code_user_reference->getDeveloper()->getId(); 

    $developer = $this->developerRepository->findOneById($id); 
    $role = $developer->getRole(); 


    if ($role != 'ROLE_ADMIN') { 
     $this->exception('developer not Admin', 100); 
    } 

    return $developer; 
} 

protected function validateSecretAppKey($secretKey, $referenceId) 
{ 
    if ($secretKey != md5($referenceId.$this->secretAppKey)) { 
     $this->exception('secret ket is not valid', 101); 
    } 
} 

protected function setSession($developer) 
{ 
    $this->session->set(self::SESSION_NAME, $developer->getId()); 
} 

protected function exception($message, $code) 
{ 
    throw new \Exception($message, $code); 
} 
} 

但在調試面板中:「您沒有通過身份驗證。 「 這是我secyrity,也許問題|

security: 
encoders: 
    Artel\ProfileBundle\Entity\Users: 
     algorithm:  sha1 
     encode_as_base64: false 
     iterations:  1 
    Artel\ProfileBundle\Entity\Developers: 
     algorithm:  sha1 
     encode_as_base64: false 
     iterations:  1 
    Symfony\Component\Security\Core\User\User: plaintext 

role_hierarchy: 
    ROLE_CLIENT: ROLE_USER 
    ROLE_COMPANY: ROLE_USER 
    ROLE_FREELANCER: ROLE_USER 
    ROLE_ADMIN: [ROLE_MODERATOR, ROLE_CLIENT, ROLE_COMPANY, ROLE_FREELANCER] 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_MODERATOR, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

providers: 
    chain_provider: 
     chain: 
      providers: [user_db, user_dev, in_memory] 
      providers: [user_dev, in_memory] 
    user_db: 
     entity: { class: Artel\ProfileBundle\Entity\Users, property: email } 
    user_dev: 
     entity: { class: Artel\ProfileBundle\Entity\Developer, property: email } 
    in_memory: 
     memory: 
     users: 
      admin_tyty: { password: adminpass_tyty, roles: [ 'ROLE_ADMIN' ] } 


firewalls: 
    default: 
     anonymous: ~ 
     http_basic: ~ 
     form_login: 
      login_path: /login 
      check_path: /login_check 
    access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, roles: ROLE_ADMIN } 

在我的變種,用戶在其他網站進行身份驗證和我的地盤我有GET方法的用戶數據 - 電子郵件,密鑰和參考

http://aog.local/app_dev.php/auth/[email protected]/962cc9a06924034d1285e8d75b2faf‌​2d/00223311121 

回答

0

你應該通過自己的登錄表單實現認證,所以用戶實際上可以驗證:http://symfony.com/doc/current/cookbook/security/form_login_setup.html

如果在窗體中有正確的路線,Symfony的將處理重ST。

+0

在我的變種,用戶在其他網站進行身份驗證和我的地盤我有GET方法的用戶數據, 'HTTP:// aog.local/app_dev.php/auth /中安閣@ gmail.com/962cc9a06924034d1285e8d75b2faf2d/00223311121' 我創建auth服務位,此服務未驗證 –

+0

像我的項目工作中的食譜和主頁。但我有來自另一個網站的GET網址。我更新我的問題 –

+0

如果你有一個無狀態的應用程序,那麼你將無法在那裏驗證你的用戶,所以你應該找到一種方法,比如oAuth做一些驗證,以獲得你在問題中發佈的第二個打印屏幕。 – Rvanlaak