yii restful
http
1,HttpBasicAuth
restful 下的controll
// 规则
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
'auth'=>function ($username, $password) { //自定义的规则
return \app\models\User::findOne([
'name' => $username,
'pwd' => $password,
'category'=>'学生',
]);
}
];
return $behaviors;
}
/*
* 在actions中关闭除get即index的其他所有请求方式。
*/
public function actions()
{
$actions = parent::actions();
// 禁用"delete" 和 "create" 操作
unset($actions['view'], $actions['create'],$actions['update'],$actions['delete']); // 取消父类中的方法(针对 model的操作类型)
// 使用"prepareDataProvider()"方法自定义数据provider
$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider']; //针对或者规定只能使用某一个方法进行访问
return $actions;
}
//注意 在做完了函数的逻辑之后添加返回值(视频资源还不懂)之后要设定返回response的基本信息
// $response = \Yii::$app->getResponse();//获得200 ok 响应的空壳
//$response->setStatusCode(201);
源码
public function authenticate($user, $request, $response)
{
$username = $request->getAuthUser();
$password = $request->getAuthPassword();
if ($this->auth) { //这个地方的auth用来控制是否按照以下的规则进行 所以返回必须是布尔值
if ($username !== null || $password !== null) {
$identity = call_user_func($this->auth, $username, $password);
if ($identity !== null) {
$user->switchIdentity($identity);
} else {
$this->handleFailure($response);
}
return $identity;
}
} elseif ($username !== null) { //定义第二次(之后)登录时的登录规则 只用AccessToken登录即可
$identity = $user->loginByAccessToken($username, get_class($this));
if ($identity === null) {
$this->handleFailure($response);
}
return $identity;
}
return null;
}
/**
* @inheritdoc
*/
public function challenge($response) // 定义了发送的报头的形式
{
$response->getHeaders()->set('WWW-Authenticate', "Basic realm=\"{$this->realm}\"");
}
二 如果是我自己写的话,我就不会用这种方式
原因有
1,url是访问服务器关键所在,但是避免不了的是要传送参数,与其这样调用这种方法的判断,自己直接做判断就可以了
2,传递参数的时候就可以传递安全访问参数,这个时候,参数的安全最高,无关乎post,get方法直接访问action啊,安全性就看你的验证多么强大了
3,综上 两种方法没有什么区别,但是在代码量上,和移动端的开发上的量就不同了。不过是换个位置传参而已
public function actions()
{
$actions = parent::actions();
// 禁用"delete" 和 "create" 操作
//unset($actions['view'], $actions['create'],$actions['update'],$actions['delete']);
unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']);
// 使用"prepareDataProvider()"方法自定义数据provider
//$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider'];
return $actions;
}
public function actionCreate(){
//还要返回这个学生可以活着已经填了那些表的信息 选择表的时候做判断。
//教师的
$name=\Yii::$app->request->post('name');
$pwd=\Yii::$app->request->post('pwd');
$studentnumber = \Yii::$app->request->post('studentnumber'); // 判断是否违法
$model1 = new User();
$exist = $model1->checkexist($studentnumber);
if($exist == null)
{return null;}
else{
$user=$model1->checkstudent($name,$pwd);
if($user==null)
{return $user=null;}
return $user;
}
}
http
1,HttpBasicAuth
restful 下的controll
// 规则
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
'auth'=>function ($username, $password) { //自定义的规则
return \app\models\User::findOne([
'name' => $username,
'pwd' => $password,
'category'=>'学生',
]);
}
];
return $behaviors;
}
/*
* 在actions中关闭除get即index的其他所有请求方式。
*/
public function actions()
{
$actions = parent::actions();
// 禁用"delete" 和 "create" 操作
unset($actions['view'], $actions['create'],$actions['update'],$actions['delete']); // 取消父类中的方法(针对 model的操作类型)
// 使用"prepareDataProvider()"方法自定义数据provider
$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider']; //针对或者规定只能使用某一个方法进行访问
return $actions;
}
//注意 在做完了函数的逻辑之后添加返回值(视频资源还不懂)之后要设定返回response的基本信息
// $response = \Yii::$app->getResponse();//获得200 ok 响应的空壳
//$response->setStatusCode(201);
源码
public function authenticate($user, $request, $response)
{
$username = $request->getAuthUser();
$password = $request->getAuthPassword();
if ($this->auth) { //这个地方的auth用来控制是否按照以下的规则进行 所以返回必须是布尔值
if ($username !== null || $password !== null) {
$identity = call_user_func($this->auth, $username, $password);
if ($identity !== null) {
$user->switchIdentity($identity);
} else {
$this->handleFailure($response);
}
return $identity;
}
} elseif ($username !== null) { //定义第二次(之后)登录时的登录规则 只用AccessToken登录即可
$identity = $user->loginByAccessToken($username, get_class($this));
if ($identity === null) {
$this->handleFailure($response);
}
return $identity;
}
return null;
}
/**
* @inheritdoc
*/
public function challenge($response) // 定义了发送的报头的形式
{
$response->getHeaders()->set('WWW-Authenticate', "Basic realm=\"{$this->realm}\"");
}
二 如果是我自己写的话,我就不会用这种方式
原因有
1,url是访问服务器关键所在,但是避免不了的是要传送参数,与其这样调用这种方法的判断,自己直接做判断就可以了
2,传递参数的时候就可以传递安全访问参数,这个时候,参数的安全最高,无关乎post,get方法直接访问action啊,安全性就看你的验证多么强大了
3,综上 两种方法没有什么区别,但是在代码量上,和移动端的开发上的量就不同了。不过是换个位置传参而已
public function actions()
{
$actions = parent::actions();
// 禁用"delete" 和 "create" 操作
//unset($actions['view'], $actions['create'],$actions['update'],$actions['delete']);
unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']);
// 使用"prepareDataProvider()"方法自定义数据provider
//$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider'];
return $actions;
}
public function actionCreate(){
//还要返回这个学生可以活着已经填了那些表的信息 选择表的时候做判断。
//教师的
$name=\Yii::$app->request->post('name');
$pwd=\Yii::$app->request->post('pwd');
$studentnumber = \Yii::$app->request->post('studentnumber'); // 判断是否违法
$model1 = new User();
$exist = $model1->checkexist($studentnumber);
if($exist == null)
{return null;}
else{
$user=$model1->checkstudent($name,$pwd);
if($user==null)
{return $user=null;}
return $user;
}
}
这个是直接做判断的。url后面必须加到action 才可以访问。之后内部判断是否违法
第一个访问的时候到controller 就行了 但是记得要加S
yii的基本的restful 参考 点击打开链接http://www.yiifans.com/forum.php?mod=viewthread&tid=2200
做判断的时候建议用postman