【问题标题】:How To Get Auth ID form user table and grab it for store to other table on database如何从用户表中获取 Auth ID 并将其存储到数据库上的其他表中
【发布时间】:2019-11-04 21:16:42
【问题描述】:

我想从已登录的用户那里获取 Auth ID,然后使用 Auth ID 存储到其他表中

用户细节控制器

这是我的商店功能

$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');

这是功能登录

 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();

模型用户

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

protected $table ='user_detail';

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

我得到这样的错误

传递给 Illuminate\Database\Eloquent\Model::fill() 的参数 1 必须 是数组类型,给定 null,调用 E:\Laravel\surevey\app\Http\Controllers\UserController.php 在第 110 行

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案1】:

    应该是Auth::id()Auth::user()->id,但您的Auth::user() 似乎返回了一个空值。请确保您的会话、路线设置正确。

    使用Auth::attempt()登录用户

    【讨论】:

    • 是的 Auth::user() 返回 null ,我该如何解决这个问题??
    • 你用php artisan make:auth了吗?
    • 我没有使用 php artisan make:auth :(
    • 你为什么不使用它?如果你使用过它,你可以避免这一切。一切都将由 laravel 设置它自我登录/注册.. 身份验证
    • 只是因为我看到一个网站上的教程,我不知道教程上不要使用来自 laravel 的身份验证
    【解决方案2】:

    您不需要使用$data->fill(Auth::user());,因为您只需设置一个user_id 字段。

    您还可以使用当前登录用户的 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 !!! ' );
    }
    

    【讨论】:

    • @JuMa 让我知道是否有帮助!
    • 我不知道,因为我没有使用 php artisan Make:auth
    • @JuMa 确保您已将Edited section 中的 postLogin 函数更新为 mentioend,然后在您的路由中添加中间件 auth
    • 我添加了但还是一样
    • 谢谢,这行得通,只需在路由上添加middlewatre auth,就可以解决问题,谢谢Vikash
    【解决方案3】:

    如果您在用户模型中的反向一对一关系如下所示:

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

    并且您确定用户已登录,您可以简单地这样做

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

    Laravel 的 ORM 负责其余的工作。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多