Как получить Auth ID из пользовательской таблицы и перехватить ее для хранения в другой таблице в базе данных - PullRequest
0 голосов
/ 22 июня 2019

Я хочу получить идентификатор авторизации от пользователя, который вошел в систему, а затем использовать идентификатор авторизации для сохранения в другой таблице

User_detail Controller

это мой магазинfunction

$data = new ModelUser();
$user= new user();
$data->fill(Auth::user());
$data->id_user = Auth::get('id');     
$data->jenis_kelamin = $request->jenis_kelamin;
$data->no_tlp = $request->no_tlp;   
$data->jurusan = $request->jurusan;
$data->wilayah = $request->wilayah;
$data->save();
return redirect()->route('surveylist');

и это функция Login

 public function LoginPost(Request $request)
    {
        $email = $request->email;
        $password = $request->password;

        $data = user::where('email',$email)->first();
        if($data)  //check email apakah ada atau tidak
        {
            if(Hash::check($password,$data->password))
            {
                Session::put('id',$data->id);
                Session::put('full_name',$data->full_name);
                Session::put('email',$data->email);
                Session::put('login',TRUE);

                return redirect('userdt');
            }
            else
            {
                return redirect('index')->with('alert','Password atau Email yang anda masukan salah !!! ' );
            }
        }
    }

это файлы маршрутов

Route::get('/index','UserController@show')->name('surevey.index');
Route::get('/logout','UserController@Logout')->name('user.logout');
Route::post('/registerpost','UserController@RegisterPost')->name('user.register');
Route::post('/loginpost','UserController@LoginPost')->name('user.login');

//reward routes
Route::get('/reward','RewardController@index')->name('reward.list');

//profile
Route::put('/editprofile/edit/{id}','UserController@edit')->name('profile.edit');
Route::post('/editprofile/update','UserController@update')->name('profile.update');
Route::get('/userdt',['middleware'=>'auth','uses'=>'UserController@userdetail'])->name('userdt.show');
Route::post('/userdt/store','UserController@store')->name('userdt.store');

//Survei
Route::get('/createsurvey','SurveyController@show')->name('survey.create');
Route::get('/surveylist','SurveyController@index')->name('survey.list');



Auth::routes();

ModelUser

protected $fillable = [
    'id_user',
    'jenis_kelamin',
    'no_tlp',
    'jurusan',
    'wilayah'
];

protected $table ='user_detail';

public function user()
{
    return $this->belongsTo(user::class);
}

и я получаю ошибку, подобную этой

Аргумент 1, передаваемый в Illuminate \ Database \ Eloquent \ Model :: fill (), должен иметь тип массива, заданный null, вызываемый в E: \Laravel \ surevey \ app \ Http \ Controllers \ UserController.php в строке 110

Ответы [ 3 ]

3 голосов
/ 22 июня 2019

Вам не нужно использовать $data->fill(Auth::user());, так как у вас есть только одно поле user_id, которое необходимо установить.

Также вы можете получить текущий зарегистрированный идентификатор пользователя, используя. \Auth::user()->id

Ваш код будет следующим:

$data = new ModelUser();
$data->id_user = \Auth::user()->id;     
$data->jenis_kelamin = $request->jenis_kelamin;
$data->no_tlp = $request->no_tlp;   
$data->jurusan = $request->jurusan;
$data->wilayah = $request->wilayah;
$data->save();
return redirect()->route('surveylist');

Примечание. Убедитесь, что вы включили промежуточное ПО auth в свой маршрут.

Как:

Route::get('profile', ['middleware' => 'auth', function() {
    // Only authenticated users may enter...
}]);

И вы внимательно следили за процессом аутентификации.

https://laravel.com/docs/5.2/authentication

Отредактировано:

Ваш логинг должен быть изменен на:

public function LoginPost(Request $request)
{
    $email = $request->email;
    $password = $request->password;

    if (Auth::attempt(['email' => $email, 'password' => $password])) {
        // Authentication passed...
        return redirect()->intended('userdt');
    }

    return redirect('index')->with('alert','Password atau Email yang anda masukan salah !!! ' );
}
0 голосов
/ 22 июня 2019

Если ваше обратное отношение один-к-одному в пользовательской модели выглядит следующим образом:

 public function detail()
{
    return $this->hasOne(ModelUser::class);
}

И вы уверены, что пользователь вошел в систему, вы можете просто сделать это

$data = Auth::user()->detail()->save($request->all());
return redirect()->route('surveylist');

ORM от Laravel позаботится обо всем остальном.

0 голосов
/ 22 июня 2019

должно быть Auth::id() или Auth::user()->id, но, похоже, ваш Auth::user() возвращает null. Удостоверьтесь, что сеансы и маршруты настроены правильно.

используйте Auth::attempt() для входа в систему пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...