Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


5 questions online user: 34

0
votes
answers
6 views
+10

FOSUserBundle窗體看起來很奇怪

0

我剛剛在我的Symfony項目上配置並準備了FOSUserBundle。但是,當我試圖表明寄存器觀點看起來像這樣:FOSUserBundle窗體看起來很奇怪

enter image description here

登記申請表(默認)應該是這樣的:

Blockquote

所有我配置的是Documentation,我不知道發生了什麼。

這是RegistrationFormType.html.twig從FOSUserBundle:

class RegistrationFormType extends AbstractType 
    { 
     ... 

     /** 
     * {@inheritdoc} 
     */ 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
       ->add('email', LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypeEmailType'), array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
       ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle')) 
       ->add('plainPassword', LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypeRepeatedType'), array(
        'type' => LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypePasswordType'), 
        'options' => array('translation_domain' => 'FOSUserBundle'), 
        'first_options' => array('label' => 'form.password'), 
        'second_options' => array('label' => 'form.password_confirmation'), 
        'invalid_message' => 'fos_user.password.mismatch', 
       )) 
      ; 
     } 
     ... 
    } 
+0

你需要看看https://symfony.com/doc/current/templating/overriding.html – zizoujab

+0

感謝您的回答,正如@ michal-g所說,我必須取消註釋該行。我之前做了壓倒一切的部分來找到這個問題。 – Mich

沙发
0
0

首先,你應該在config.yml 取消註釋行運行轉換組件


translator: { fallbacks: ["en"] }

和(就像在評論中說的)讀了關於壓倒性的意見

+0

就是這樣!它解決了我的問題。我沒有注意到該行,它的工作。謝謝Michal。 – Mich

+0

否 - 問題,但請 - 如果這anwser幫助你,標記anwser爲接受:) –

+0

當然,我剛剛接受它作爲解決方案,檢查它! ;-) – Mich

0
votes
answers
6 views
+10

已登錄的用戶使用「FOSUser Bundle」而不先登出的「角色提升」

1

我正在使用FOSUser捆綁管理我爲我的同事在更大的Symfony項目之上創建的數據導出包的訪問我們公司的。 因此我創建了一個DataExportBundle,可以從Symfony項目中導出定義的數據部分。已登錄的用戶使用「FOSUser Bundle」而不先登出的「角色提升」

的DataexportBundle提供

  • 下載區爲我們的員工,他們可以選擇一個查詢和 在不同的格式,如JSON或CSV獲取數據。
  • 管理員可以管理(添加,編輯和刪除)員工下載區中可供選擇的數據庫查詢的管理區域。

必須保護「數據導出」下載區域,以便只有員工才能訪問它。匿名用戶不允許訪問此區域。 「數據導出」管理區域只能由一些具有額外管理角色的員工訪問。

因此,我啓用了一個角色層次在我的「security.yml」文件:

security: 
    role_hierarchy: 
     ROLE_USER:  [ROLE_USER] 
     ROLE_EDITORIAL: [ROLE_USER, ROLE_EDITORIAL] 
     ROLE_ADMIN:  [ROLE_USER, ROLE_EDITORIAL, ROLE_ADMIN] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_SUPER_ADMIN] 
    access_control: 
     - { path: ^/dataexport/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/dataexportadmin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/dataexport/, role: ROLE_EDITORIAL } 
     - { path: ^/dataexportadmin/, role: ROLE_ADMIN } 
     - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    firewalls: 
     admin_secured: 
      context: site 
      pattern: ^/dataexportadmin/ 
      form_login: 
       provider: fos_userbundle 
       csrf_token_generator: security.csrf.token_manager 
       target_path_parameter: redirect_url 
       login_path: /dataexportadmin/login 
       check_path: /dataexportadmin/login_check 
      logout: 
       path: /dataexportadmin/logout 
      anonymous: true 
     main: 
      context: site 
      pattern: ^/dataexport/ 
      form_login: 
       provider: fos_userbundle 
       csrf_token_generator: security.csrf.token_manager 
       target_path_parameter: redirect_url 
       default_target_path: /dataexport/ 
       login_path: /dataexport/login 
       check_path: /dataexport/login_check 
      logout: 
       path: /dataexport/logout 
      anonymous: true 

正如你所看到的,我也定義了兩個防火牆。通過這樣做,我希望實現已登錄的具有「ROLE_EDITORIAL」角色(不具有「ROLE_ADMIN」角色)的用戶顯示的登錄表單,他可以作爲另一個用戶(必須具有「ROLE_ADMIN」角色集)。

我創建2個用戶:

sudo -u www-data bin/console fos:user:create employee_A 
sudo -u www-data bin/console fos:user:promote employee_A ROLE_EDITORIAL 

sudo -u www-data bin/console fos:user:create employee_B 
sudo -u www-data bin/console fos:user:promote employee_B ROLE_ADMIN 

我的問題是,這種「特權提升」是不行的;相反,當「employee_A」點擊指向「數據導出」管理區域的鏈接時,會顯示「403禁止訪問」頁面。我的計劃是在此處顯示登錄表單。如果登錄(並因此「特權提升」)失敗,則必須保留登錄用戶「employee_A」的角色「ROLE_EDITORIAL」。 我知道更常用的方式是用戶employee_A(ROLE_EDITORIAL)先註銷,然後以用戶employee_B(ROLE_ADMIN)登錄。這樣,捆綁包已經可以工作了,但是我想像我說的那樣實施一種「特權提升」。

我的問題是:如何使用「FOSUser bundle」或任何其他Symfony用戶管理包進行「特權提升」?

文件 「config.yml」:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: AppBundleEntityFosUser 
    from_email: 
     address: ... 
     sender_name: ... 

文件 「的routing.yml」:

dataexportadmin_login: 
    path: /dataexportadmin/login 
    defaults: { _controller: MyUserBundle:Security:login } 

dataexportadmin_login_check: 
    path: /dataexportadmin/login_check 
    defaults: { _controller: MyUserBundle:Security:check } 

dataexportadmin_logout: 
    path: /dataexportadmin/logout 
    defaults: { _controller: MyUserBundle:Security:logout } 

dataexport_login: 
    path: /dataexport/login 
    defaults: { _controller: MyUserBundle:Security:login } 

dataexport_login_check: 
    path: /dataexport/login_check 
    defaults: { _controller: MyUserBundle:Security:check } 

dataexport_logout: 
    path: /dataexport/logout 
    defaults: { _controller: MyUserBundle:Security:logout } 

dataexport_admin: 
    resource: "@DataexportBundle/Controller/QueryController.php" 
    type:  annotation 
    prefix: /dataexportadmin 
    options: 
     expose: true 

dataexport: 
    resource: "@DataexportBundle/Controller/DefaultController.php" 
    type:  annotation 
    prefix: /dataexport 
    options: 
     expose: true 

my_user: 
    resource: "@MyUserBundle/Controller/" 
    type:  annotation 
    prefix: /

文件 「我/ UserBundle /控制器/ SecurityController.php」

<?php 

namespace MyUserBundleController; 

use FOSUserBundleControllerSecurityController as BaseController; 

class SecurityController extends BaseController 
{ 
    public function renderLogin(array $data) 
    { 
     $requestAttributes = $this->container->get('request_stack')->getCurrentRequest(); 

     if ($requestAttributes->get('_route') === 'dataexportadmin_login') 
     { 
      $template = sprintf('MyUserBundle:Security:adminlogin.html.twig'); 
     } 
     else 
     { 
      $template = sprintf('MyUserBundle:Security:login.html.twig'); 
     } 

     return $this->container->get('templating')->renderResponse($template, $data); 
    } 
} 

兩個Twig模板之間的相關區別是表單標記的「action」屬性:

<form action="{{ path("dataexport_login_check") }}" method="post"> 

vs.

<form action="{{ path("dataexportadmin_login_check") }}" method="post"> 

感謝您的幫助!

沙发
0
0

使用FOS用戶軟件包只有用戶是否通過身份驗證或不是。 如果您登錄另一個用戶,您將更改登錄的用戶。

你可能想改變dataexportadmin安全:

  1. 低ACCESS_CONTROL水平
  2. 路線的形式在你捆綁
  3. 如果證書檢查,在$_SESSION['allowd_to_dataexportadmin_until']
  4. 設置截止日期行動
  5. 在您的導出包中爲每個動作分派一個事件,以檢查當前用戶是否具有AUTHORISED_ROLES(admin)或非空$_SESSION['allowd_to_dataexportadmin_until']或低於new DateTime()

希望這會有所幫助

0
votes
answers
5 views
+10

Lexik捆綁的Symfony 3

0

我用LexikAuthentication捆綁。當我嘗試使用AJAX的login_check使UI,我回來在localStorage的令牌,但是當我嘗試登錄到我的UI,我得到401 not authorizationLexik捆綁的Symfony 3

這是我login_check:

function authenticate(e) { 
     e.preventDefault(); 
     $.ajax({ 
      url: 'http://localhost:8000/login_check', 
      type: 'POST', 
      data: JSON.stringify({ 
       '_username': $('#username').val(), 
       '_password': $('#password').val() 
      }), 
      dataType: 'json', 
      contentType: "application/json", 
      access_token: "", 
      crossDomain: true, 
      success: function (data) { 
       if (data != null && data != '') { 
        var token = "Bearer " + data.token; 
        console.log(token); 
        localStorage.setItem('token', data.token); 
        } 
      } 
     }); 

任何人都知道如何解決這一問題?

沙发
0
0

好吧,我發現我自己的解決方案。 錯誤是在這裏:localStorage.setItem( '令牌',data.token); 它應該是這樣的:localStorage.setItem(「承載」 data.token);

0
votes
answers
3 views
+10

如何在FOSUserBundle 2.0中定義模板引擎?

1

我剛剛從FOS User Bundle 2.0 alpha1移到了穩定版2.0,並且我得到了這個。如何在FOSUserBundle 2.0中定義模板引擎?

利用這種配置:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: BizTVUserBundleEntityUser 
    from_email: 
     address: "%mailer_user%" 
     sender_name: "%mailer_user%" 
    template: 
     engine: twig 

我得到這個錯誤:

無法識別的選項 「模板」, 「fos_user」 下

而與此配置:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: BizTVUserBundleEntityUser 
    from_email: 
     address: "%mailer_user%" 
     sender_name: "%mailer_user%" 
# template: 
#  engine: twig 

我反而得到這個錯誤:

必須定義參數「fos_user.template.engine」。

沙发
0
1

找到我的答案在這裏:https://github.com/FriendsOfSymfony/FOSUserBundle/issues/1621

顯然模板引擎已過時,但我稱它在我的安全控制器的自定義行。

0
votes
answers
2 views
+10

需要對這些文本行的意圖和對象的傳遞

0

的解釋你好可以向我解釋爲什麼在我發現在互聯網上我們使用捆綁的代碼?我們爲什麼不直接將對象放入意圖?這與執行速度有關嗎?需要對這些文本行的意圖和對象的傳遞

Contact contact = new Contact();  
Intent intent = new Intent(); 
     Bundle args = new Bundle(); 
     args.putSerializable("contact", (contact)); 
     intent.putExtra("BUNDLE", args); 

爲什麼要捆綁而不是直接這樣呢?

Intent intent = new Intent(); 
    intent.putExtra("contact", contact); 
+0

接收方期待一個包。就這樣。當然,您可以在沒有的情況下傳輸這些信但它的設計和實施都是這樣。 – greenapps

沙发
0
0

因爲intent putExtra無法直接接觸您的聯繫人。如果想要通過您的聯繫人工具Serializable接口,如下所示

public class Contact implements Serializable{ 

}