मई में वापस, मैंने this question पोस्ट किया। मैं एक ही ऐप पर एक ही काम करने की कोशिश कर रहा हूं, लेकिन मुझे इस समस्या का समाधान नहीं मिला है। मेरे पास अधिक जानकारी और बेहतर कोड है, इसलिए मुझे आशा है कि आप लोग इसे हल करने में मेरी मदद कर सकते हैं।केकपीएचपी 2.x एथ दो अलग लॉग इन
केस का उपयोग करें: डॉक्टर के कार्यालय में व्यवस्थापक उपयोगकर्ताओं के साथ एक वेबसाइट है। उपयोगकर्ता User
मॉडल और UsersController
के माध्यम से केकेपीएचपी के ऑथ के साथ सफलतापूर्वक लॉगिन करते हैं।
डॉक्टरों ने पूरी तरह से अलग प्रोफ़ाइल और कार्यों के साथ चिकित्सकों का जिक्र किया है। डॉक्टरों को example.com/physicians/login
के माध्यम से लॉगिन करने की आवश्यकता है। हालांकि, इस लॉगिन इस
authError => 'You are not authorized to access that location.'
यहाँ के साथ विफल हो रहा है मेरी कोड AppController
में है:
class AppController extends Controller {
public $helpers = array('Form', 'Html', 'Time', 'Session', 'Js' => array('Jquery'));
public $components = array(
'Session',
'Auth' => array(
'autoRedirect' => false,
'authorize' => 'Controller'
)
);
public function beforeFilter() {
$this->Auth->allow('index', 'view', 'edit', 'display', 'featured', 'events', 'contact', 'signup', 'search', 'view_category', 'view_archive', 'addComment', 'schedule', 'login');
}
}
और यहाँ है मेरी UsersController
कि काम कर रहा है:
class UsersController extends AppController {
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'fields' => array(
'username' => 'username',
'password' => 'password'
)
)
),
'loginRedirect' => array('controller' => 'users', 'action' => 'admin'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'index'),
'loginAction' => array('controller' => 'users', 'action' => 'login'),
'sessionKey' => 'Admin'
)
);
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add', 'login', 'logout');
}
function isAuthorized() {
return true;
}
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
}
public function logout() {
$this->Session->destroy();
$this->redirect($this->Auth->logout());
}
यहां मेराहैकोड है जो काम नहीं कर:
class PhysiciansController extends AppController {
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'userModel' => 'Physician',
'fields' => array(
'username' => 'username',
'password' => 'password'
)
)
),
'loginRedirect' => array('controller' => 'physicians', 'action' => 'dashboard'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'index'),
'loginAction' => array('controller' => 'physicians', 'action' => 'login'),
'sessionKey' => 'Physician'
)
);
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->authorize = array(
'Actions' => array(
'userModel' => 'Physician',
'actionPath' => 'physicians'
)
);
$this->Auth->allow('login', 'logout');
// $this->Session->write('Auth.redirect','/physicians/index');
}
function isAuthorized() {
return true;
}
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect(array('controller' => 'physicians', 'action' => 'dashboard'));
} else {
$this->Session->read();
debug($this->Auth);
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
}
public function logout() {
$this->Session->destroy();
$this->redirect($this->Auth->logout());
}
मैं वास्तव में नहीं है से शुरुआत करने और एसीएल के लिए स्विच करना चाहते हैं - मुझे यकीन है कि सिर्फ दो लॉगिन के लिए आवश्यक है नहीं कर रहा हूँ। मदद बहुत सराहना की जाएगी!
संपादित करें: नीचे जोशुआ का जवाब अद्भुत और बहुत उपयोगी है। मैंने इसे कार्यान्वित किया, लेकिन जब भी मैं चिकित्सक के रूप में/भौतिक/भौतिक/लॉगिन (उपसर्ग/नियंत्रक/क्रिया) के माध्यम से लॉगिन करने की कोशिश करता हूं, तब भी मुझे अनधिकृत त्रुटि मिल रही है। व्यवस्थापक सेटअप महान काम करता है।
object(AuthComponent) {
components => array(
(int) 0 => 'Session',
(int) 1 => 'RequestHandler'
)
authenticate => array(
'Form' => array(
'userModel' => 'Physician'
)
)
authorize => false
ajaxLogin => null
flash => array(
'element' => 'default',
'key' => 'auth',
'params' => array()
)
loginAction => array(
'controller' => 'physicians',
'action' => 'phys_login'
)
loginRedirect => null
logoutRedirect => '/'
authError => 'You are not authorized to access that location.'
allowedActions => array()
request => object(CakeRequest) {
params => array(
'prefix' => '*****',
'plugin' => null,
'controller' => 'physicians',
'action' => 'phys_login',
'named' => array(),
'pass' => array(),
'phys' => true,
'_Token' => array(
'key' => 'ad1ea69c3b2c7b9e833bbda03ef18b04079b23c3',
'unlockedFields' => array()
),
'isAjax' => false
)
data => array(
'Physician' => array(
'password' => '*****',
'username' => 'deewilcox'
)
)
query => array()
url => 'phys/physicians/login'
base => ''
webroot => '/'
here => '/phys/physicians/login'
}
response => object(CakeResponse) {
}
settings => array()
}
धन्यवाद इस के लिए बहुत बहुत - आप रॉक। मैंने आज लागू किया और व्यवस्थापक उपसर्ग और उपयोगकर्ता नियंत्रक के साथ कोई परेशानी नहीं है। हालांकि, चिकित्सक नियंत्रक अभी भी मुझे वही "आप अधिकृत नहीं हैं" त्रुटि दे रहा है। तो वास्तव में कुछ भी नहीं बदला। अगर मैं मदद करता हूं तो मैं उपरोक्त डीबग कोड पोस्ट करूंगा। – deewilcox
तो क्या आपको 'अमान्य उपयोगकर्ता नाम या पासवर्ड मिल रहा है, पुनः प्रयास करें' या आप इसे बिल्कुल नहीं प्राप्त कर रहे हैं, और केवल 'आप उस स्थान तक पहुंचने के लिए अधिकृत नहीं हैं'। यही कहना है, क्या आपका "अगर ($ यह-> एथ-> लॉगिन()) {" पास है, और फिर आपको केवल लॉगिन-लॉगिन रीडायरेक्ट पर कोई समस्या है? या वह लाइन असफल हो जाती है? –
मुझे "आप अधिकृत नहीं हैं" त्रुटि मिलती है। अगर मैं '($ this-> अनुरोध-> डेटा) पास करता हूं, तो यह काम करता है। मैंने '$ this-> Auth-> लॉगिन ($ this-> request-> डेटा) के साथ एक अमान्य उपयोगकर्ता नाम और पासवर्ड का उपयोग करके परीक्षण किया; ', और उपयोगकर्ता नाम या पासवर्ड गलत होने पर लॉगिन विफल रहता है (जैसा होना चाहिए)। – deewilcox