我见过使用
的教程Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
看起来很好,但它不是很可定制,因为几乎所有东西都是自动化的。例如,在我的情况下,我不想在我的URL中使用/ auth /前缀,并且我有一个稍有不同的用户表。
...为了这个问题,我也希望了解如何自己做事,而不仅仅是完全自动化。
所以这就是我的AuthController现在的样子:
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use App\Http\Requests\CreateUserRequest;
use Input, Auth;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Display registration.
*
* @return Response
*/
public function getRegister()
{
return view('auth.register');
}
/**
* Create a new user instance after a valid registration.
*
* @param CreateUserRequest $request
* @param User $user
* @return Response
*/
protected function postRegister(CreateUserRequest $request, User $user)
{
//$request->password = bcrypt($request->password);
//$user->password = bcrypt($user->password);
$user->create($request->all());
return redirect('/');
}
/**
* Dispay login page
*
* @return Response
*/
public function getLogin()
{
return view('auth.login');
}
/**
* Attempt to login.
*
* @return Response
*/
public function postLogin()
{
$email = Input::get('email');
$password = Input::get('password');
if (Auth::attempt(['email' => $email, 'password' => $password], true)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
else{
//To do: Figure out how to pass a login failed error.
return view('auth.login');
}
}
public function getLogout()
{
Auth::logout();
return redirect('/');
}
}
到目前为止它似乎工作得很好,除了我无法测试postLogin方法,因为数据库中的所有密码都以纯文本(不加密)存储。正如您可以通过postRegister方法中的注释行代码告诉我,我尝试了一些尝试来加密密码,但我似乎无法访问将存储在数据库中的值。
我也知道最初文件中的替代方式:
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
...但我确信必须有另一种方法,而不是逐个手动硬编码每个字段......这也不会使用我的CreateUserResquest验证文件(我认为这是默认文件也有验证方法我摆脱了代替正确的Request validator文件)
简而言之,我的问题是: 如何从postRegister方法中加密密码?。
答案 0 :(得分:0)
namespace App\Http\Controllers\Auth;
use Hash; //Add this
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use App\Http\Requests\CreateUserRequest;
use Input, Auth;
class AuthController extends Controller{
}
而不是bcrypt使用hash($ password)。
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']), //change this to 'password' => Hash::make($datas['password'])
]);
答案 1 :(得分:0)
我不能说我觉得这是一种干净或好的方法来加密密码而无需对所有字段进行硬编码,但这是我提出的一个可行的解决方案:
/**
* Create a new user instance after a valid registration.
*
* @param CreateUserRequest $request
* @param User $user
* @return Response
*/
protected function postRegister(CreateUserRequest $request, User $user)
{
//Extract the current password
$arr = $request->all();
$arr['password'] = Hash::make($arr['password']);
$request->replace($arr); //Re-inject the new data array in the request
$user->create($request->all());
return redirect('/');
}
我会等待评论&如果有更好的答案。 此外,如果其他有相同问题的人正在阅读此内容,我添加了“使用哈希”;在文件的开头。