Éviter de CakePHP composant Auth pour afficher l'authentification des messages d'erreur
Je voudrais me débarrasser de composant Auth messages d'erreur, spécialement le authError message qui vient à chaque fois que j'essaie d'accéder à un non-permis d'action.
Juste pour être sûr, j'ai vérifier qu'il n'y a pas de $this->Session->flash()
appeler de n'importe où dans la mise en page. En outre, le réglage de la valeur est vide ne fonctionne pas, que le composant a une valeur par défaut valeur de message.
Je suis en utilisant le composant Auth avec la configuration suivante dans la classe AppController:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'userModel' => 'WebUser',
'loginAction' => '/login',
'loginRedirect' => '/',
'logoutRedirect' => '/login',
'autoRedirect' => false,
),
'Session',
...
...
}
Pour connexion et déconnexion les redirections que j'ai mis deux itinéraires:
Router::connect('/', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/login', array('controller' => 'web_users', 'action' => 'login'));
La connexion action au sein de WebUser contrôleur est presque vide; j'ai seulement changer la mise en page par défaut:
function login() {
$this->layout = 'login';
$this->set('title_for_layout', 'Sign in');
}
Enfin, j'ai une question très simple de connexion.ctp fichier de mise en page:
<html>
<head>
...
</head>
<body>
...
<?php echo $content_for_layout; ?>
...
</body>
</html>
Quand j'ai accès http://example.com/login
il n'y a pas de problème, pas de message, juste le formulaire de connexion. Mais j'ai le défaut authError message lors de la demande de toute autre action, juste après le composant Auth redirige vers la connexion action. Deux questions se posent:
- Pourquoi le composant Auth l'affichage des messages flash quand il n'y a pas de
$this->Session->flash()
appeler de n'importe où? (voir mise à jour 2 ci-dessous) - Comment puis-je configurer un vide/valeur null dans authError attribut?
Merci!
Mise à JOUR
Je suis venu avec un vraiment laid solution: j'ai créé un élément login_error.ctp et affecté à la flashElement attribut du composant Auth initialisation:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'flashElement' => 'login_error',
...
...
}
Dans login_error.ctp je viens de comparer avec le authError de message par défaut:
<?php if ( $message !== 'You are not authorized to access that location.' ): ?>
<div id="flashMessage" class="message"><?php echo $message; ?></div>
<?php endif; ?>
Il fonctionne, mais je le déteste!
Mise à JOUR 2
Grâce à dogmatic69 de réponse, je me suis forcé à tout vérifier de nouveau. J'ai enfin trouvé d'où l'appel à $this->Session->flash()
a été faite. Il était sur un petit élément de vue que j'avais écrit avant. Il n'avait rien à voir avec la connexion/déconnexion des trucs alors que je n'avais pas fait attention à ce fichier.
Mise à JOUR 3
Grâce à SpawnCxy répondre ainsi. La copie du composant Auth et de faire des modifications, c'est une meilleure approche de comparaison de chaînes de caractères.
La valeur par défaut définie dans le composant Auth: "Vous n'êtes pas autorisé à accéder à cet emplacement.'. Bien sûr, je vais essayer d'éviter de remplacer le composant 🙂
OriginalL'auteur elitalon | 2011-02-09
Vous devez vous connecter pour publier un commentaire.
juste enlever
$this->Session->flash('auth')
à partir de votre point de vue/mise en page.http://book.cakephp.org/view/1467/flash
grep -R auth
), et j'ai enfin trouvé l'appel. Il était sur un petit élément que j'avais écrit avant. Il n'avait rien à voir avec la connexion/déconnexion des trucs alors que je n'avais pas fait attention à ce fichier.est maintenant, quand vous la marque de la question posée...
En effet! Est-il possible de marquer deux réponses? SpawnCxy réponse m'a aidé aussi bien 🙂
une seule bonne réponse par question, vous pouvez jusqu'vote un peu de bien
OriginalL'auteur dogmatic69
Dans CakePHP 2.1 dans mon AppController, je l'utilise pour remplacer mon "auth" des messages flash.
Voici mon $components:
Je suis incertain sur si vous pouvez le faire dans les versions précédentes de Gâteau.
Aussi, vous pouvez faire:
Qui travaille trop! Nice!
OriginalL'auteur kirikintha
Il y a une autre façon de faire le composant Auth plus personnalisée.Vous pouvez copier
/cake/libs/controller/components/auth.php
à
/app/controllers/components/auth.php
et de modifier le
__setDefaults
fonction dans la nouvelle copie.Vous pouvez spécifier votre propre auth message d'erreur en cas de changement de la valeur de la clé deauthError
dans$defaults
.Définir une chaîne vide si vous voulez ne rien montrer.OriginalL'auteur Young
Je viens de tester ce Gâteau dans 2.x et cela a fonctionné. Mettez ceci dans votre Contrôleur de
beforeFilter()
fonction:OriginalL'auteur Loolooii
J'ai eu un scénario similaire.
Lorsqu'un utilisateur est connecté, '/' itinéraires pour un tableau de bord de l'action dans un contrôleur. Lorsqu'un utilisateur n'est pas connecté, cependant, je voulais à l'utilisateur d'être en mesure de demander à mydomain.com ou mydomain.com/users/login sans obtenir un authError message.
Si l'utilisateur a demandé une autre page, cependant, je voulais que le “non autorisé” authError message à afficher comme il le ferait normalement.
Voici ma solution: dans le beforeFilter dans AppController
Raison de la façon dont les itinéraires de travail, si l'utilisateur demande des '/' ils pas recevoir un auth erreur. Toutefois, s'ils le demandent /nom_controller/le tableau de bord, ils sera recevoir un auth erreur parce que $this->Auth->allow('tableau de bord') se déclenche uniquement si elles le demandent '/'.
OriginalL'auteur Jeff Lundberg
Je pratique une autre meilleure façon de Les jeunes de la Réponse. Dans AppController veuillez configurer le code suivant :
J'espère qu'elle sera mieux que la personnalisation Bibliothèques de Base pour un travail simple.
OriginalL'auteur monsur.hoq
J'étais avec un problème similaire, mais je suis en utilisant CakePHP 3.4. J'ai résolu l'édition
config/routes.php
:OriginalL'auteur Keoma Borges