رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Authentication؟
#1
سلام
من توی پروژه ام دو تا جدول user و manager دارم  و نمیخوام از سیستم احرازهویت تهیه شده توسط لاراول استفاده  کنم و  فرم لاگین هرکدومم جداست. سوالی که دارم اینه که کجا باید مشخص کنم اگه کاربر خواست لاگین شه از جدول user اطلاعات رو بررسی کنه و اگه مدیر خواست لاگین شه از جدول manager?
یه مشکلی هم که هست اینه که اصلا Auth::attempt کار نمیکنه و همش else اجرا میشه! و false برمیگرده!پسوردم هش کردم
از راهنماییتون سپاسگزارم
کدی که نوشتم :
کد پی‌اچ‌پی:
{!! Form::open(['url' => '/login']) !!}
 
                               <div class="form-group">
 
                                   {!! Form::label('username','نام کاربری') !!}
 
                                   {!! Form::text('username',null,['class'=>'form-control input-sm' 'id'=>'username']) !!}
 
                                   {!! Form::label('password','کلمه عبور') !!}
 
                                   {!! Form::password('password',['class'=>'form-control input-sm' 'id'=>'password']) !!}
 
                               </div>
 
                               <div class="form-group">
 
                                   {!! Form::button('ورود',['class'=>'btn btn-primary btn-md btn-block' 'id'=>'' 'type'=>'submit']) !!}
 
                               </div>
 
                           {!! Form::close() !!}
-----------------------------------------------------------------
Route::post('/login''userController@authenticate');
------------------------------------------------------------------
public function 
authenticate()
 
   {
 
       $input_username Request::get('username');
 
       $input_password Request::get('password');
 
       if (Auth::attempt(['Username' => $input_username'Password' => $input_password])) {
//            return redirect()->intended('welcome');
 
           return 'true';
 
       }else{
 
           return 'false';
 
       }
 
   
پاسخ
#2
در مورد یوزر و منیجر باید برای هر کدوم کنترلر جداگانه ای بنویسید و فرم ها رو هم جدا کنید و یا توی صفحه لاگین یک چک باکس قرار بدید که اگر تیک خورده بود بره از منیجر جست و جو کنه
برای این که از کلاس های اماده لاراول استفاده نکنید میتونید طبق روش زیر عمل کنید:
یک کنترلر بسازید و توی ROUTE اضافه کنید برای ثبت و لاگین من سورس کد براتون میذارم:
کد پی‌اچ‌پی:
login::
 
   public function postLogin(Request $request)
 
   {

 
       $validator Validator::make($request->all(), [
 
           'mobile' => 'required|numeric',
 
           'password' => 'required|min:6',
 
       ]);
 
       if ($validator->fails()) {
 
           return redirect()->back()->withErrors($validator->errors());
 
       }
 
       $auth Auth::attempt(['mobile' => $request->mobile'password' => $request->password]);
 
       if ($auth) {
 
           return redirect()->intended('panel');
 
       }
 
       else
        
{
 
               return redirect()->back();
 
           echo $auth;
 
       }
 
   }
Register::
public function 
postRegister(Request $data)
 
   {
 
       $validator Validator::make($data->all(), [
 
           'firstname' => 'required|max:50',
 
           'lastname' => 'required|max:50',
 
           'mobile' => 'required|numeric|unique:users',
 
           'username' => 'required|max:50|unique:users',
 
           'password' => 'required|confirmed|min:6',
 
       ]);
 
       if ($validator->fails()) {
 
           return redirect()->back()->withErrors($validator->errors());
 
       }
 
       $register User::create([
 
           'firstname' => $data['firstname'],
 
           'lastname' => $data['lastname'],
 
           'mobile' => $data['mobile'],
 
           'username' => $data['username'],
 
           'role_id' => 1,
 
           'password' => bcrypt($data['password']),
 
       ]);
 
   
بقیه موارد رو میتونید مثل همین بنویسید
دقت داشته باشید که موقع ثبت نام پسورد رو کد کردم اما موقع لاگین کد نکردم
یادتون باشه توی لاراول 5.0 به بعد سشن ها به صورت خودکار اجرا نمیشن بلکه باید middleware با نام web رو توی Route استفاده کنید
و یا این که داخل فایل kernel قطه کد مربوط به middleware سشن رو از وب به $middleware انتقال بدید تا توی تمام قسمت های سایت سشن اجرا بشه
و در اخر نظر شخصیم:
به جای این که از دو جدول برای مدیر و کاربر استفاده کنید همون جدول کاربر رو داشته باشید و گروه های کاربری مشخص کنید براشون
به عنوان مثال: داخل دیتا بیس users فیلدی با نام group_id داشته باشید به صورت عددی که ایدی گروه کاربری رو توی خودش جای بده
به این صورت شما کنترل راحت تری دارید و میتونید چندین گروه کاربری با پنل مخصوص خودشون داشته باشید و توی Route و کنترلر ها هم راحت تر سطح دسترسی رو برای ویرایش حذف و .... مشخص کنید(البته این مورد اخر رو با Gate ها بهتر میتونید پیاده کنید,کلی گفتم)
پاسخ
#3
اگه از لاراول 5.2 استفاده می کنید تو فایل config/auth.php باید یک guard جدید اضافه کنید مثلا
کد پی‌اچ‌پی:
'admin' => [
            
'driver' => 'session',
            
'provider' => 'admins',
        ], 
و provider رو هم اینجوری ست کنید
کد پی‌اچ‌پی:
'admins'=> [
            
'driver' => 'eloquent',
            
'model'  => App\Admin::class,
        ] 
پیش فرض که با users لاگین میکنه ولی هرجا ادمین میخواهید لاگین کنه کافیه اینکارو بکنید
کد پی‌اچ‌پی:
if (Auth::guard('admin')->attempt($credentials)) {
    
//

پاسخ
#4
نقل قول:UnexpectedValueException in Response.php line 397:
The Response content must be a string or object implementing __toString(), "boolean" given.
این خطا رو همش نشون میده Angry . لطفا راهنمایی کنید
پاسخ
#5
(04-21-2016, 04:13 PM)maryam نوشته:  
نقل قول:UnexpectedValueException in Response.php line 397:
The Response content must be a string or object implementing __toString(), "boolean" given.
این خطا رو همش نشون میده Angry . لطفا راهنمایی کنید
از کدوم روش استفاده کردید؟
این خطا داره میگه مقدار داده شده باید رشته یا شی باشه اما بولین هست...
توی کدوم قسمت این خطا رو دارید؟ سورسش رو هم بذارید
پاسخ
#6
کد پی‌اچ‌پی:
<?php

namespace App\Http\Controllers;


use 
App\User;
use 
Illuminate\Http\Request;
use 
App\Http\Requests;
use 
Auth;

class 
userController extends Controller
{
    public function 
new_user_registration(Request $request){
        
$this->validate($request, [
            
'name' => 'required|max:50',
            
'family' => 'required|max:50',
            
'std_num' => 'required|numeric|unique:users',
            
'username' => 'required|max:50|unique:users',
            
'password' => 'required|min:6',
            
'email' => 'required||email|unique:users',
        ]);

        
User::create([
            
'name' => $request->name,
            
'family' => $request->family,
            
'std_num' => $request->std_num,
            
'username' => $request->username,
            
'password' => bcrypt($request->password),
            
'email' => $request->email,
        ]);
        return 
redirect('/');
    }

    public function 
authenticate(Request $request)
    {
        
$this->validate($request, [
            
'username' => 'required',
            
'password' => 'required',
        ]);

        return 
Auth::attempt(['username' => $request->username'password' => $request->password]) ? true false;
    }


کد پی‌اچ‌پی:
Route::post('/login''userController@authenticate'); 
کد پی‌اچ‌پی:
<div class="col-sm-4 col-xs-12">
                    <
div class="list-group text-right">
                        <
div class="list-group-item active">
                            <
h2 class="list-group-item-heading">ورود به سامانه</h2>
                        </
div>
                        <
div class="list-group-item">
                            {!! 
Form::open(['url' => '/login']) !!}
                                <
div class="form-group">
                                    {!! 
Form::label('username','نام کاربری') !!}
                                    {!! 
Form::text('username',null,['class'=>'form-control input-sm' 'id'=>'username']) !!}
                                    {!! 
Form::label('password','کلمه عبور') !!}
                                    {!! 
Form::password('password',['class'=>'form-control input-sm' 'id'=>'password']) !!}
                                </
div>
                                <
div class="form-group">
                                    {!! 
Form::button('ورود',['class'=>'btn btn-primary btn-md btn-block' 'id'=>'' 'type'=>'submit']) !!}
                                </
div>
                            {!! 
Form::close() !!}
                        </
div>
                    </
div>
                </
div
ممنون میشم کمک کنید.

ببخشید اینم مدل User.
کد پی‌اچ‌پی:
<?php

namespace App;

use 
Illuminate\Foundation\Auth\User as Authenticatable;

class 
User extends Authenticatable
{
    protected 
$fillable = ['name''family''std_num''username''password''email'];

    public function 
thesis(){
        return 
$this->hasOne('App\Thesis');
    }


پاسخ
#7
کد پی‌اچ‌پی:
$auth Auth::attempt(['username' => $request->username'password' => $request->password]);
        if (
$auth) {
            return 
redirect()->intended('panel');
        }
        else
        {
            return 
redirect()->back()->withErrors('errors');
        } 
به این صورت امتحان کنید
پاسخ
#8
نوشتم ولی متاسفانه جواب نداد
پاسخ
#9
از کدوم ورژن لاراول استفاده میکنید؟
کلاس مدل رو خودتون نوشتید؟
نباید خطایی داشته باشه تو لاگین...
ارورتون همون ارور قبله؟
موقع لود شدن فرم این خطا رو دارید یا زمانی که اطلاعات رو ارسال میکنید به سرور؟
پاسخ
#10
شرمنده به خدا.
ورژن 5.2
بله مدلو خودم نوشتم.نباید قبلی رو پاک میکردم؟ آخه روِ مدل خود لاراول روی یه پروژه دیگه همین کدو امتحان کردم و جواب نداد.
الان با این کدی که شما فرمودید امتحان کردم همش error مینویسه توی view.
ممنون از راهنماییتون
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  نحوه ایجاد Token-Based Authentication(oauth2) در لاراول با استفاده از passport anonymox 0 33 11-12-2016, 06:27 AM
آخرین ارسال: anonymox
  آموزش Authentication در لاراول 5 alihossein 0 962 06-08-2015, 06:48 AM
آخرین ارسال: alihossein

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

انجمن لاراولیستا به عشق توسعه دهنده ها و علاقمندان به این فریم ورک محبوب ایجاد شده و امیدواریم با نظرات خوبتون ما رو در بهبود کار یاری کنید. در ضمن خیلی هم خوشحال میشیم شما هم در توسعه این انجمن سهمی داشته باشید.